|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
![]() Если обернуть вызов в ComDispFunction() не поможет?
X++: static void test_Com(Args _args) { Com comApplication; str ret; str s; ComDispFunction funcGet; COMVariant varArgStr1; COMVariant varArgStr2; COMVariant varArgStr3; COMVariant varArgStr4; ComVariant varRet; ; try { comApplication = new COM("iDocIntegrator.DocOperation"); if(!comApplication) { info("error"); return; } // Вместо прямого вызова, сделать вызов через ComDispFunction //ret = comApplication.Login("login", "pass", "pass", "D:\key"); // Функция funcGet = new ComDispFunction(comApplication, "Login", COMDispContext::PropertyGet); // Параметры varArgStr1 = COMVariant::createFromStr("login"); varArgStr2 = COMVariant::createFromStr("pass"); varArgStr3 = COMVariant::createFromStr("pass"); varArgStr4 = COMVariant::createFromStr("D:\key"); // Возвращаемое значение varRet = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_BSTR); // Выполнение funcGet.call(varArgStr1, varArgStr2, varArgStr3, varArgStr4, varRet); // Результат выполнения ret = varRet.bStr(); if(!ret) { // Вместо прямого вызова, сделать вызов через ComDispFunction //s = comApplication.GetDocInfoList("20160218", "20160218"); // Функция funcGet = new ComDispFunction(comApplication, "GetDocInfoList", COMDispContext::PropertyGet); // Параметры varArgStr1 = COMVariant::createFromStr("20160218"); varArgStr2 = COMVariant::createFromStr("20160218"); // Возвращаемое значение varRet = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_BSTR); // Выполнение funcGet.call(varArgStr1, varArgStr2, varRet); // Результат выполнения s = varRet.bStr(); info(s); } else { info(ret); } comApplication = null; } catch(Exception::Error) { comApplication = null; throw error("Обработка отменена!"); } comApplication = null; info('end'); } <?xml version="1.0" encoding="windows-1251"?><ERROR>Access violation at address 1105C5CF in module 'libeay32.dll'. Write of address 0889E338</ERROR> |
|
![]() |
#2 |
Участник
|
Цитата:
И еще, думаю, не принципиально, но все-таки, первой командой в примере Excel идет выборка списка документов. X++: MsgBox "Получение списка архивных документов за период"
Call testGetDocInfoList(o) X++: XML xml; (...) xml = comApplication.GetDocInfoList() info(xml) Set o = Nothing
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#3 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
![]() А Вы не могли бы на время тестирования отключить антивирус, если он у Вас есть? Может быть, он блокирует библиотеку?
И еще, думаю, не принципиально, но все-таки, первой командой в примере Excel идет выборка списка документов. X++: MsgBox "Получение списка архивных документов за период"
Call testGetDocInfoList(o) X++: XML xml; (...) xml = comApplication.GetDocInfoList() info(xml) Set o = Nothing Метод 'GetDocInfoList' в COM-объекте класса '{A6103CA4-D33A-48A5-BB08-7893A12BE5D8}' возвратил код ошибки 0x8000FFFF (<неизвестно>), который означает: Вы не вошли в систему!. |
|
![]() |
#4 |
Участник
|
И еще, у разработчиков я узнавала, почему библиотека выгружается из памяти, ничего не ответили, единственное, что сказали, и то не разработчики,а техническая поддержка банка, что они не знают, как будет вести себя библиотека при одновременных запусках.
|
|
![]() |
#5 |
Участник
|
может стоит попробовать Thread t = new Thread();
|
|
![]() |
#6 |
Участник
|
Попробовала создать новый поток, чтобы выполнить подключение библиотеки в отдельном потоке,
t = new Thread(); //t.removeOnComplete(true); t.run(classnum(FCH_ThreadDemo), identifierstr(run)); Аксапта ругается Ошибка времени выполнения xApplication(Объект), метод initGlobal вызван с неправильными параметрами, хотя я использую учебный пример Аксапты по работе с потоками TutorialThread. |
|
Теги |
com connector, com-объект, thread |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|