Автор | Сообщение |
|
| |
Пост N: 186
Зарегистрирован: 05.10.06
|
|
Отправлено: 18.10.18 18:48. Заголовок: помогите подключить библиотеку DLL
Имеется библиотека COM объекта DLL Есть примеры подключения и инициализации в C# и С, в этих языках ничего не понимаю. Библиотека вроде подгружается через hb_libload() А как инициализировать объект из библиотеки ? вот из примера C: цитата: | #import "CEBPayment.dll" CEBPayment::ICEBPaymentPluginPtr plugin; ******* CEBPayment::ICEBPaymentPluginPtr plugin(L"CEBPayment.CEBPaymentPlugin"); plugin->config(); |
| как я понимаю создается объект plugin в котором есть набор свойств и методов Как его создать и использовать под Harbor ?
|
|
|
Ответов - 19
[только новые]
|
|
|
| постоянный участник
|
Пост N: 6074
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.10.18 19:39. Заголовок: Я делал/разбирался д..
Я делал/разбирался для МиниГуи использование чужих DLL, но СОМ объекты не разбирал. Посмотри там для Харбора есть пример загрузки DLL и использование функций C++ Может пригодиться. Проект - https://cloud.mail.ru/public/JWHz/xCvn6Jycy
|
|
|
|
| |
Пост N: 6949
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.10.18 21:23. Заголовок: MIKHAIL пишет: #imp..
MIKHAIL пишет: цитата: | #import "CEBPayment.dll" CEBPayment::ICEBPaymentPluginPtr plugin; ******* CEBPayment::ICEBPaymentPluginPtr plugin(L"CEBPayment.CEBPaymentPlugin"); plugin->config(); |
| Откуда эта инфа ? PS Гугл молчит на запрос "CEBPayment.dll"
|
|
|
|
| |
Пост N: 187
Зарегистрирован: 05.10.06
|
|
Отправлено: 19.10.18 06:54. Заголовок: Dima пишет: Гугл мол..
Dima пишет: цитата: | Гугл молчит на запрос "CEBPayment.dll" |
| Это библиотека для работы с платежным терминалом (эквайринг) Кредит Европа Банк. Разработчик не афиширует ее, поставляет на платной основе. Текст взят из примера на С. Инициализация объекта на C# выглядит так: CEBPayment.CEBPaymentPlugin plugin = new CEBPayment.CEBPaymentPlugin(); Andrey пишет: цитата: | Посмотри там для Харбора есть пример загрузки DLL и использование функций C++ |
| Пример посмотрел, получается нужно вернуть из библиотеки значение объект, какой тип для этого использовать в calldll() ? И как потом работать с этим объектом, как обычно или через calldll() ?
|
|
|
|
| |
Пост N: 355
Зарегистрирован: 12.11.06
|
|
Отправлено: 19.10.18 08:17. Заголовок: Для формирования кар..
Для формирования картинки QR кода использую внешнюю DLL, описание параметров функции брал из мануала. Авось подход поможет? /* Генерация QR кода по переданному тексту и маршруту вывода в файл *.bmp До вызова на ПК должна быть установлена библиотека QRCodelib и доступен для вызова DLL файл библиотеки Параметры: cText Преобразуемый в QR Code текст cPath Маршрут вывода картиник кода cBmp Имя файла картинки Возвращает: Имя файла картинки с маршрутом */ FUNC cQRGen(cText,cPath,cBmp) STAT qrDLL LOCA cFile:="", nResp:=0 #Define DC_CALL_STD 0x0020 DEFAULT cPath TO "", cBmp TO "QR.BMP", cText TO "http://check.egais.ru?id=UUID&dt=0404161630&cn=Common_Name" cFile := cPath+cBmp IF !File("QRCodelib.Dll") THEN RETU "" qrDLL := LoadLibrary("QRCodelib.Dll" ) // Подгружается библиотека из DLL файла nResp := DllCall(qrDLL,DC_CALL_STD,"FastQRCode",cText,cFile) // Формирование и вывод в файл FreeLibrary(qrDLL) // Освобождение из памяти ресурсов занятых библой RETU (cFile)
|
|
|
|
| moderator
|
Пост N: 1084
Зарегистрирован: 06.07.06
|
|
Отправлено: 19.10.18 09:11. Заголовок: Поскольку речь идет ..
Поскольку речь идет о Com-объекте, надо, наверное, использовать не подключение dll, а OLE-механизм, что-то вроде: obj := win_OleCreateObject( "CEBPayment.CEBPaymentPlugin" ) obj:config()
|
|
|
|
| Администратор
|
Пост N: 3808
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.10.18 09:13. Заголовок: MIKHAIL пишет: Имее..
MIKHAIL пишет: цитата: | Имеется библиотека COM объекта DLL |
| Так может там есть COM интерфейс, и ничего подключать и не надо ? PS практически одновременно выстрелили
|
|
|
|
| |
Пост N: 188
Зарегистрирован: 05.10.06
|
|
Отправлено: 19.10.18 09:44. Заголовок: alkresin пишет: obj..
alkresin пишет: цитата: | obj := win_OleCreateObject( "CEBPayment.CEBPaymentPlugin" ) obj:config() |
| Это я попробовал с самого начала, возвращает пустой результат. Уже пробовал вставлять куски программы на С через #pragma, но так как не смыслю в С, выдает ошибки которые не знаю как исправить
|
|
|
|
| Администратор
|
Пост N: 3809
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.10.18 10:53. Заголовок: Может эту dll надо з..
Может эту dll надо зарегистрировать ? Что-то вроде regsvr32 CEBPayment.dll В доке что-то есть по этому поводу ? Как использовать эту dll, и что это вообще такое ?
|
|
|
|
| |
Пост N: 189
Зарегистрирован: 05.10.06
|
|
Отправлено: 19.10.18 11:28. Заголовок: Pasha пишет: Может ..
Pasha пишет: цитата: | Может эту dll надо зарегистрировать ? |
| Да, есть инсталяшка, регистрирует dll Что это такое уже написал выше. По идее, при инициализации должны получить объект и работать с ним как обычно.
|
|
|
|
| moderator
|
Пост N: 1085
Зарегистрирован: 06.07.06
|
|
Отправлено: 19.10.18 12:23. Заголовок: Может, правильное им..
Может, правильное имя этого COM-объекта не "CEBPayment.CEBPaymentPlugin", а как-то по другому. Попробуйте посмотреть список всех зарегистированных COM-объектов в системе - есть специальные утилиты, ActiveXHelper, например.
|
|
|
|
| |
Пост N: 6950
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.10.18 12:34. Заголовок: MIKHAIL Доку скинь ..
MIKHAIL Доку скинь сюда
|
|
|
|
|
| |
Пост N: 190
Зарегистрирован: 05.10.06
|
|
Отправлено: 19.10.18 13:04. Заголовок: Dima пишет: Доку ск..
|
|
|
|
| |
Пост N: 6951
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.10.18 13:13. Заголовок: MIKHAIL Так в пукте..
MIKHAIL Так в пукте 2 все ж изложено и надо пробовать
|
|
|
|
| |
Пост N: 191
Зарегистрирован: 05.10.06
|
|
Отправлено: 19.10.18 13:13. Заголовок: Прислали тест на C#,..
Прислали тест на C#, у меня запускается, значит библиотека рабочая
|
|
|
|
| |
Пост N: 192
Зарегистрирован: 05.10.06
|
|
Отправлено: 19.10.18 13:16. Заголовок: Dima естественно я ..
Dima естественно я это все проделывал, об этом писал выше... у меня не получается создать объект в программе
|
|
|
|
| |
Пост N: 6952
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.10.18 14:35. Заголовок: Поигрался и тоже нич..
Поигрался и тоже ничего не вышло. Объект создать не получилось. Если играться как с DLL , то сама DLL грузится нормально и хэндл возвращает. А вот вызвать из нее config не получилось
|
|
|
|
| |
Пост N: 193
Зарегистрирован: 05.10.06
|
|
Отправлено: 19.10.18 16:52. Заголовок: информация от разраб..
информация от разработчика: цитата: | В С++ подключается так: #import "CEBPayment.dll" - здесь путь до библиотеки, отсюда компилятор импортирует методы. Это нужно один раз для компиляции. Использоваться будет библиотека, прописанная в реестре. CEBPayment::ICEBPaymentPluginPtr plugin; CoInitialize(NULL); CEBPayment::ICEBPaymentPluginPtr plugin(L"CEBPayment.CEBPaymentPlugin"); plugin->config(); CoUninitialize(); И в С# и в C++ использовалось раннее связывание. |
| пробовал вставить код: цитата: | #pragma BEGINDUMP #import "CEBPayment.dll" CEBPayment::ICEBPaymentPluginPtr plugin; HB_FUNC( MYDL ) { CoInitialize(NULL); CEBPayment::ICEBPaymentPluginPtr plugin(L"CEBPayment.CEBPaymentPlugin"); plugin->config(); CoUninitialize(); } #pragma ENDDUMP |
| сыпятся ошибки: цитата: | Error E2503 magazin.prg 10637: Missing or incorrect version of TypeLibImport.dll in function HB_FUN_MYDL Error E2451 magazin.prg 10638: Undefined symbol 'CEBPayment' in function HB_FUN_MYDL Error E2379 magazin.prg 10638: Statement missing ; in function HB_FUN_MYDL Warning W8065 magazin.prg 10639: Call to function 'CoInitialize' with no prototype in function HB_FUN_MYDL Error E2379 magazin.prg 10640: Statement missing ; in function HB_FUN_MYDL Error E2451 magazin.prg 10641: Undefined symbol 'plugin' in function HB_FUN_MYDL Warning W8065 magazin.prg 10642: Call to function 'CoUninitialize' with no prototype in function HB_FUN_MYDL |
| видимо что то не хватает или не совместимо...
|
|
|
|
| |
Пост N: 6953
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.10.18 17:01. Заголовок: я пробовал Impdef но..
я пробовал Impdef но список получился не большой LIBRARY CEBPAYMENT.DLL EXPORTS DllCanUnloadNow @3 @0 ; DllCanUnloadNow DllGetClassObject @4 @1 ; DllGetClassObject DllRegisterServer @2 @2 ; DllRegisterServer DllUnregisterServer @1 @3 ; DllUnregisterServer
|
|
|
|
| moderator
|
Пост N: 1087
Зарегистрирован: 06.07.06
|
|
Отправлено: 19.10.18 17:17. Заголовок: Ну, во-первых, надо ..
Ну, во-первых, надо включить соответствующие C заголовки: #include <windows.h> #include <ole2.h> #include <ocidl.h> Во вторых, в #pragma BEGINDUMP ... #pragma ENDDUMP это, наверное, не может компилироваться, т.к. это C++ код. а Harbour использует C компилятор. Поэтому надо вынести код в отдельный файл с расширением cpp и откомпилировать: void mydl( void ) { ... } и вызывать эту mydl() из HB_FUNC( MYDL ): #pragma BEGINDUMP HB_FUNC( MYDL ) { mydl(); } #pragma ENDDUMP Может, что-то получится.
|
|
|
|