|
|
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
Добрый день! Пытаюсь подключиться к libpioneer3.dll, - DLL для работы с фискальным аппаратом Пионер 114ф. В описании разработчик приводит пример инициализации сессии работы с ККТ по IP адресу на C++: Код: plaintext 1. Параметры: host IP-адрес ККТ timeout таймаут ожидания ответа response строка с результатом выполнения Возвращает: отрицательное число код ошибки положительное число идентификатор сессии работы с ККТ, в дальнейшем используется во всех командах. Я попробовал перевести на Delphi: Код: 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. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. При запуске программы подключение к DLL проходит, о чём свидетельствует получение версии DLL, однако попытка инициализации работы с ККТ по IP адресу дает "Ошибка подключения к ККТ" (-2). Пинг аппарата по IP проходит. Похоже, я напортачил с передачей параметров в функцию pioneer3_open, но разобраться где - не хватает опыта. Помогите ПОЖ.! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2019, 19:10 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
Во-первых, в описании на С++ ничего не сказано о stdcall, следовательно это cdecl. Во-вторых, параметр timeout - 16-ти разрядный, а твой Integer явно шире. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2019, 19:24 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВо-первых, в описании на С++ ничего не сказано о stdcall, следовательно это cdecl. Во-вторых, параметр timeout - 16-ти разрядный, а твой Integer явно шире. Да, в документации нашел: Все команды имеют спецификацию вызова вида: extern ”C” __declspec ( dllimport ) _cdecl В дальнейшей документации при описании формата команд эта спецификация опущена. Переписал Код: pascal 1. 2. 3. Результат, увы, тот-же. Первая процедура выполняется, функция - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2019, 20:12 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
3 параметр строка. А память под нее кто выделять должен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2019, 20:38 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
const char * = в делфи PAnsiChar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2019, 20:51 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2019, 20:52 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
zeon11Tpioneer3_open = function( const AIp_Addr: PChar; Вот этот const ты совершенно зря сюда впихнул. И да, если у тебя Delphi юникодная, то оно должно быть AnsiChar всюду. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2019, 21:10 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
Так заработало: Код: pascal 1. , так тоже работает: Код: pascal 1. Вызов функции: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Под память под строку с ответом, как пишут разработчики, выделяет и освобождает библиотека. Спасибо всем, помогли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 04:26 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
аж интересно стало - как длл узнает, что память под строку уже можно освобождать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 07:46 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
zeon11, Учти с таким подходом у тебя будут утечки памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 09:34 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
Vizit0rаж интересно стало - как длл узнает, что память под строку уже можно освобождать? Например, предполагается общий диспетчер памяти, а освобожденнием занимается клиент библиотеки. Либо спецметод библиотеки, а освобождение вызовом этого метода также на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 09:41 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
ёёёёёVizit0rаж интересно стало - как длл узнает, что память под строку уже можно освобождать? Например, предполагается общий диспетчер памяти, а освобожденнием занимается клиент библиотеки. Либо спецметод библиотеки, а освобождение вызовом этого метода также на клиенте. Скорее, второе:авторПод память под строку с ответом, как пишут разработчики, выделяет и освобождает библиотека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 09:43 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
Vizit0rаж интересно стало - как длл узнает, что память под строку уже можно освобождать?Попросить её (вызвать её процедуру, освобождающую память)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 09:50 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
Vizit0rинтересно стало - как длл узнает, что память под строку уже можно освобождать?может и никак а тупо при очередном вызове освобождается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2019, 10:28 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
Вот в преамбуле к документации к библиотеке: ........................... Все команды получают параметы и возвращают ответ в виде null-терминированных строк. Память под строку с ответом выделяет и освобождает библиотека, поэтому нельзя освобождать указатель на строку с ответом, а наоборот, для дальнейшего разбора рекомендуется скопировать строку ответа, выделив память в пользовательской программе. Параметры и результаты выполнения оформлены в виде формате JSON, все строковые данные должны быть в UTF-8. ............................ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 07:30 |
|
||
|
Помогите с подключением к DLL
|
|||
|---|---|---|---|
|
#18+
zeon11, Тогда при объявлении переменных надо указывать ansistring(CP_UTF8). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2019, 09:39 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39842729&tid=2039200]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
144ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 436ms |

| 0 / 0 |
