AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.03.2016, 12:56   #1  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Если обернуть вызов в 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>
Старый 18.03.2016, 16:04   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,719 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от vikuss2006 Посмотреть сообщение
Опять ошибка:
<?xml version="1.0" encoding="windows-1251"?><ERROR>Access violation at address 1105C5CF in module 'libeay32.dll'. Write of address 0889E338</ERROR>
А Вы не могли бы на время тестирования отключить антивирус, если он у Вас есть? Может быть, он блокирует библиотеку?

И еще, думаю, не принципиально, но все-таки, первой командой в примере Excel идет выборка списка документов.

X++:
MsgBox "Получение списка архивных документов за период"
Call testGetDocInfoList(o)
И только потом конкретный документ. Может, Вам сделать то же самое?

X++:
XML xml;

(...)

xml = comApplication.GetDocInfoList()
info(xml)
PS: А Вы не узнавали у разработчиков, почему их библиотека не выгружается из памяти при работе с Excel? Вроде бы прямое обнуление идет

Set o = Nothing
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 21.03.2016, 10:43   #3  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
А Вы не могли бы на время тестирования отключить антивирус, если он у Вас есть? Может быть, он блокирует библиотеку?

И еще, думаю, не принципиально, но все-таки, первой командой в примере Excel идет выборка списка документов.

X++:
MsgBox "Получение списка архивных документов за период"
Call testGetDocInfoList(o)
И только потом конкретный документ. Может, Вам сделать то же самое?

X++:
XML xml;

(...)

xml = comApplication.GetDocInfoList()
info(xml)
PS: А Вы не узнавали у разработчиков, почему их библиотека не выгружается из памяти при работе с Excel? Вроде бы прямое обнуление идет

Set o = Nothing
Попробовала отключать антивирус, и получать список документов после Login, но все равно выскакивает та же ошибка:
Метод 'GetDocInfoList' в COM-объекте класса '{A6103CA4-D33A-48A5-BB08-7893A12BE5D8}' возвратил код ошибки 0x8000FFFF (<неизвестно>), который означает: Вы не вошли в систему!.
Старый 21.03.2016, 10:48   #4  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
И еще, у разработчиков я узнавала, почему библиотека выгружается из памяти, ничего не ответили, единственное, что сказали, и то не разработчики,а техническая поддержка банка, что они не знают, как будет вести себя библиотека при одновременных запусках.
Старый 21.03.2016, 17:58   #5  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
может стоит попробовать Thread t = new Thread();
Старый 22.03.2016, 15:45   #6  
vikuss2006 is offline
vikuss2006
Участник
 
42 / 10 (1) +
Регистрация: 22.11.2013
Попробовала создать новый поток, чтобы выполнить подключение библиотеки в отдельном потоке,
t = new Thread();
//t.removeOnComplete(true);
t.run(classnum(FCH_ThreadDemo), identifierstr(run));
Аксапта ругается Ошибка времени выполнения xApplication(Объект), метод initGlobal вызван с неправильными параметрами, хотя я использую учебный пример Аксапты по работе с потоками TutorialThread.
Теги
com connector, com-объект, thread

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axmfg: Lean manufacturing: Picking activities and kanban line events Blog bot DAX Blogs 0 26.08.2014 21:13
atinkerersnotebook: Using Vendor Requests to Manage On-boarding New Vendors Blog bot DAX Blogs 1 22.10.2013 02:24
atinkerersnotebook: Using Service Management to Track Service Orders Blog bot DAX Blogs 1 25.08.2013 19:16
atinkerersnotebook: Configuring Lean Manufacturing in Dynamics AX 2012 Blog bot DAX Blogs 1 12.08.2013 00:15
dynamicsaxtraining: Vendor returns Blog bot DAX Blogs 0 11.10.2012 00:11
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:44.