|
|
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
Доброго дня! Пытаюсь управлять карточным пинпадом c Arcus2 из Дельфи. Он управляется библиотекой ArcCom.dll По документации сделал JS код, работает отлично. Там всего 7 строчек: Код: javascript 1. 2. 3. 4. 5. 6. 7. Но, надо в Дельфи. А в ней возникает ошибка "несовпадение типов". Я догадываюсь, что из-за передачи параметра в OLE компоненту по значению, а надо по ссылке. Вообще мануал говорит так: создайте объект Request, объект Response и вызовите метод Exchange, который в Response вернёт результат работы. Выходит, Response надо передать по ссылке. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Для похожего оборудования поддержка на код Err=CPT.OleFunction("LinkTest","8300"); отвечала в таком ключе, но без конкретики: "Согласно документации на OLE-компоненту метод LinkTest в качестве аргумента принимает ссылку на строку, в которую OLE-компонента записывает модель терминала. В приведенном фрагменте кода в метод LinkTest передается константная строка". В самой dll объекты объявлены как интерфейсы. Код: pascal 1. 2. 3. 4. Но, я то передаю объект. Вроде как он и так передаётся по ссылке? Как правильно написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 04:25 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio Я догадываюсь, что из-за передачи параметра в OLE компоненту по значению, а надо по ссылке. Подозреваю что ошибка выскакивает еще тут: Код: pascal 1. о чем тебе недвусмысленно сообщают - хотят число а ты даешь строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 07:05 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
не-а. Если б было так просто, увы. Полез в dll проверить параметры: Код: pascal 1. 2. 3. 4. На termReq.Amount := 100; логично сообщает: Incompatible types WideString and Integer. В OLE используются строки WideString, а не string. Теперь ищу как правильно конвертнуть string '100' в widestring. termReq.Amount := PWideChar(WideString('100')); выдает type not allowed in ole automation call ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 09:22 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio, какая версия Delphi? На какой строчке точно происходит ошибка и ее полный текст? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 09:34 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio Полез в dll проверить параметры: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 09:40 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
Zelius, версия Дельфи пробовал на обоих. И на 7 и на Studio 10 Seatle. Ошибка Exception Class EOLESysError message 'Несовпадение типов' на строке метода Exchange: res := AP2.Exchange(termReq, termResp, 15); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 09:53 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio, Короче, импортируй библиотеку типов "ArcCom..." и выложи сюда декларацию "TPCPOSTConnectorObj..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 10:05 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio Для похожего оборудования поддержка на код Err=CPT.OleFunction("LinkTest","8300"); отвечала в таком ключе, но без конкретики: "Согласно документации на OLE-компоненту метод LinkTest в качестве аргумента принимает ссылку на строку, в которую OLE-компонента записывает модель терминала. В приведенном фрагменте кода в метод LinkTest передается константная строка". В этом случае ошибка из-за того, что в метод вы передавали строку "8300", которая является константой, т.е. не может быть выходным параметром. По существу вопроса. Пытались приводить OleVariant к нужному интерфейсу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 10:08 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис ssergio, Короче, импортируй библиотеку типов "ArcCom..." и выложи сюда декларацию "TPCPOSTConnectorObj..." Код: 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. Меня беспокоит, что в объявлении метода Exchange параметр ISAPacketObj, а я создаю СОМ объекты SAPacketObj. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 10:27 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio Меня беспокоит, что в объявлении метода Exchange параметр ISAPacketObj, а я создаю СОМ объекты SAPacketObj. Смущает var в декларации метода. Попробуй так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 10:40 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
[quot goldmi45#22283280] ssergio По существу вопроса. Пытались приводить OleVariant к нужному интерфейсу? В руководстве администратора Arcus написано Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Даёт создать только termResp := CreateOleObject('ArcCom.SAPacketObj'); Ругается на CreateOleObject('ArcCom.ISAPacketObj') : OleSysError недопустимая строка с названием класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 10:42 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio, имхо, дело в параметрах, попробуй без строк их передавать, как целое. у тебя используется Dipatch, а там магия. можно попробовать поотлаживать, вдруг ошибка до оле объекта. или использовать интерфейсы напрямую, там прозрачнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 10:42 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис Попробуй так: Заработало! Вы - гений! Огромное спасибо! Пару очевидных опечаток исправил. Надо приводить OleVariant к IDispatch? Никогда в жизни б не догадался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 10:47 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio Надо приводить OleVariant к IDispatch? Но тут особый*, ламеру поручили API делать. * - а может уже и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 11:17 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio, А зачем вам вообще OleVariant? Используйте раннее связывание Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 11:28 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ А зачем вам вообще OleVariant? Используйте раннее связывание Потом эти друзья выпустят patch/обновление в котором добавят метод в интерфейс и "здравствуйте товарищи" (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 11:36 |
|
||
|
Несовпадение типов при передаче параметров в OLE компоненту
|
|||
|---|---|---|---|
|
#18+
ssergio, давным-давно была у меня ситуация примерно как у вас, когда OLE-обьект совершенно непонятно работал и лишь саппорт разработчика подсказал, что я инициализирую какое-то там OleVariant свойство неверным типом данных. Ибо свойство ожидало тип знаковый INTEGER , а я ему передавал беззнаковый DWORD. Это выражалось таким образом Я писал что-то типа Код: pascal 1. А надо было, что бы компилятор ясно понял, что это INTEGER, так 1) либо Код: pascal 1. 2. 3. 4. 5. 2) либо так (я на этом варианте остановился) Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2021, 11:47 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=26&tid=2037603]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 357ms |

| 0 / 0 |
