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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.03.2016, 12:56   #12  
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>
Теги
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, время: 16:43.