|
|
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Фэйтл ЭраПетр надо чтобы из другой программы (язык MQL4) получить последовательность записей запроса Query (select * from table) Что ж ты сразу не сказал про мкл4. Фиг тебе, а не интерфейсы. И, естественно, никаких тебе объектов из dll. Используй какую-нибудь json или xml или csv для возврата структур. Проще всего возвращать все записи сразу. Ибо иначе тебе придется в длл готовить и хранить контекст запроса. Ничего сложного, просто кодить больше. На самом деле все работает. Осталась одна проблема: глобальное объявление ADOQuery к которому идет обращение несколько раз пока до дойдем по последней записи. Так вот вопрос если все методы описанные выше сделать в виде интерфейса или класса - будет создаваться свой экземпляр этого объекта в своем разделе памяти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 22:16 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петрбудет создаваться свой экземпляр этого объекта в своем разделе памяти?В каком своем? Не надо его нигде объявлять. Его надо создавать и возвращать функцией создания в основную программу. Как хэндл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 23:14 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
ПетрТак вот вопрос если все методы описанные выше сделать в виде интерфейса или класса - будет создаваться свой экземпляр этого объекта в своем разделе памяти? В "своем". :) Например, такая схема: вызываешь dll метод GetQuery('select ... from ...'), в котором создается TADOQuery и возвращается указатель на него. Далее, для перебора записи используешь, например, метод FetchNext(указатель_на_запрос TADOQuery), который возвращает структуру (xml,json), содержащую текущую запись. Или возвращающую признак EOF, а текущую запись вытягиваешь по отдельному полю, GetField(имя_поля). Не забыть придумать стратегию обработки ошибок: например, когда коннект обломился или поля такого нет. И в конце не забыть вызвать метод разрушения объекта. Ручками, до выгрузки dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2018, 23:24 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Да вы правы, создавать надо из основной программы. Ну какбы вроде все встало на свои места. Обработка исключений - это конечно самое тонкое место. Главная проблема обрыв коннекта. Буду думать Всем спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2018, 00:26 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
решил все таки сделать доступ к компонентам ADO через интерфейс и что-то заблудился в двух соснах, при присвоении интерфейсной переменной получаю runtime error. для примера набросал проект. Код: 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. Что не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 13:12 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, Результат выполнения Create чему то присваиваешь?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 13:29 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
да затупил Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 13:37 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
Петр, Ты не лез бы пока в интерфейсы, мил человек, с таким то уровнем базовых навыков (прошу без обид), думаешь они тебе чем то помогут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 13:46 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
для вызова переменной интерфейса через DLL, делаю функцию ее создания в DLL Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. но вызов GetMQLADO из основной программы - опять выдает runtime error Код: pascal 1. 2. 3. 4. 5. 6. что не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 14:44 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
проблема была в неверном объявлении импортируемой функции правильный вызов: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 15:02 |
|
||
|
обращение к DataSet через dll
|
|||
|---|---|---|---|
|
#18+
тестовый пример работает, коннект устанавливается и разрывается: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. но после закрытия формы основной программы получаю ошибку 'Invalid pointer operation'. Хотя я так понимаю память интерфейсной переменной сама должна была освободиться. Както дополнительно надо ее освобождать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2019, 15:18 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39755873&tid=2039946]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
182ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 481ms |

| 0 / 0 |
