|
|
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Задача написать DLL обертку для работы с датасетом (используется TADOQuery). Есть внешнее приложение в котором нужно вернуть последовательно строки датасета, для последующей обработки. Работа с датасетом идет через DLL Как сделать обертку для метода ADOQuery.Next ? Т.е. из внешнего приложения код будет такого вида: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2018, 14:21 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, Пусть указатель на объект TDataset и будет handle. Заменить sql_query.EOF на функцию sql_query_EOF, sql_query.Next на функцию sql_query.Next, и всё - можно все остальное так и оставить. А еще можно - объединить их в одну функцию sql_query_fetch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2018, 17:12 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
да но как мне правильно объявить этот указатель в DLL, чтобы он был виден во внешнем приложении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2018, 23:20 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, импортируй из dll интерфейс. У меня, например, такой интерфейс реализует метод GetNewQuey: Код: pascal 1. 2. Где ICommonQuery выглядит (примерно) так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Реализация - в соответствии с внутренними особенностями используемых компонентов. Использование (например, заполнение массива aReports): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Здесь ConnectDataModule - "корневой" интерфейс, импортированный из dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 00:04 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петрда но как мне правильно объявить этот указатель в DLL, чтобы он был виден во внешнем приложении?Никак не объявить. Его будет возвращать ф-ция set_sql_query. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 03:35 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
YuRockПетрда но как мне правильно объявить этот указатель в DLL, чтобы он был виден во внешнем приложении?Никак не объявить. Его будет возвращать ф-ция set_sql_query. что-то не работает: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 14:47 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Фэйтл ЭраПетр, импортируй из dll интерфейс. У меня, например, такой интерфейс реализует метод GetNewQuey: Код: pascal 1. 2. т.е. вы возвращаете сразу массив? не работал никогда в "интерфейсом", в данном случае почему именно он используется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 14:52 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, тебе надо разобраться, что такое интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 15:25 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петрчто-то не работаетт.к. очень много ошибок. 1. Addr не нужен, просто приводи к типу. А то получается указатель на указатель, который ты потом не разадресовываешь. 2. Что за ADOConnection, кто его создает - неизвестно. 3. Твой ErrMessage - это ад какой-то. Ты туда мертвый указатель посылаешь зачастую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 15:38 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, Зачем это все надо? Для общего развития? Удобно так не будет. Пусть dll лучше возвращает результат, а не буффер из базы данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 15:41 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
YuRockПетрчто-то не работаетт.к. очень много ошибок. 1. Addr не нужен, просто приводи к типу. А то получается указатель на указатель, который ты потом не разадресовываешь. 2. Что за ADOConnection, кто его создает - неизвестно. 3. Твой ErrMessage - это ад какой-то. Ты туда мертвый указатель посылаешь зачастую. ошибок не дает, но значение поля не возвращает. 1. подскажите как правильно, не селен в указателях 2. не весь код прислал. ADOConnection - устанавливает коннект с БД 3. ErrMessage - это не важно зачем надо: надо чтобы из другой программы (язык MQL4) получить последовательность записей запроса Query (select * from table) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 16:17 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
могу привести весь код если надо для теста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 16:23 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, 1. Для начала передаешь widestring, а не PWidechar. Pwidechar - ссылкается на string, который может в любое время уничтожиться. 2. Result := Pointer(ADOQuery); 3. Помни про общий менеджер памяти. 4. Сделай все на интерфейсах+widestring, так жить проще. Интерфейсы - это классы, только лучше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 16:25 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, 1. Ничего не делай в секциях initialization и finalization - ибо грех это. 2. Multithreaded = true - это тоже важно. 3. CoInitializate - надо наверное тоже сделать, и обратную процедуру не забыть. В чем ошибка-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 16:28 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, Для начала научись передавать просто текст из mql4 в приложение. А потом займись уже Ado. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 16:36 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
итак вроде что-то вырисовывается: Код в принципе заработал. Первый затык был Код: pascal 1. по индексу значение не выдавалось, заменил на Код: pascal 1. тип PWideChar - был выбран не случайно с widestring не работает. значения integer DLL возвращает правильно, символьные возвращает в виде: '??' - похоже в кодировке проблема главный вопрос именно в правильном объявлении TADOQuery - где и как объявлять? на данный момент: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 17:41 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, передача объекта по ссылке из dll чрезвычайно опасна. Даже изменение опций того же самого компилятора может повлечь трудноуловимые глюки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 17:49 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Фэйтл ЭраПетр, передача объекта по ссылке из dll чрезвычайно опасна. Даже изменение опций того же самого компилятора может повлечь трудноуловимые глюки. возможно, как тогда решить задачу? Возвращением массива? Хотя тут я тоже не уверен, что получиться его правильно вернуть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 17:57 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петрвозможно, как тогда решить задачу?Мы откуда знаем. Ты ж условие задачи не говоришь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 18:05 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
YuRockПетрвозможно, как тогда решить задачу?Мы откуда знаем. Ты ж условие задачи не говоришь. дважды сказал: 2-я строка первого поста: Есть внешнее приложение в котором нужно вернуть последовательно строки датасета, для последующей обработки. и ниже по тексту: зачем надо: надо чтобы из другой программы (язык MQL4) получить последовательность записей запроса Query (select * from table) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 18:10 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр надо чтобы из другой программы (язык MQL4) В нем точно можно dll подключать? Если да - то что-то вроде 1-го твоего поста. Но только надо изучить, как работать с памятью и все остальное. Как передавать во внешнюю прогу строки и прочее. Буфферы для этого должны быть выделены там, а значит - сначала надо их подготовить, а лишь затем - фетчить записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 21:19 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр надо чтобы из другой программы (язык MQL4) получить последовательность записей запроса Query (select * from table) Что ж ты сразу не сказал про мкл4. Фиг тебе, а не интерфейсы. И, естественно, никаких тебе объектов из dll. Используй какую-нибудь json или xml или csv для возврата структур. Проще всего возвращать все записи сразу. Ибо иначе тебе придется в длл готовить и хранить контекст запроса. Ничего сложного, просто кодить больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 21:38 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Фэйтл ЭраИ, естественно, никаких тебе объектов из dll.Стесняюсь спросить, тебе религия мешает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 21:42 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
GatorФэйтл ЭраИ, естественно, никаких тебе объектов из dll.Стесняюсь спросить, тебе религия мешает? Ну расскажи скорее, как объекты Delphi в MQL4 использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 21:49 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эра, Алрес, он и в Африке - адрес. На что он указывает и когда - тебе знать надо (область видимости). Адреc обеспечиваешь ты, как и структуру по этому адресу. Главное, вовремя данные обеспечить и память освободить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 21:59 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=85&tid=2039946]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 324ms |

| 0 / 0 |
