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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.12.2006, 15:53   #21  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
нет ((
ругается на то что аргумент опущен
Старый 26.12.2006, 16:02   #22  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Откройте Excel (или Word), вызовите VBA (ALT+F11). Вызовите Tools/References. Найдите там вашу библиотеку. Поставьте для нее галку и нажмите Ok. Откройте Object Browser [F2]. Выберите в списке библиотеку. Выберите интерфейс и метод - посмотрите список передаваемых параметров и возвращаемое значение
__________________
Axapta v.3.0 sp5 kr2
Старый 26.12.2006, 16:11   #23  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
Function LinkTest(vfCptModel) As Integer
Старый 26.12.2006, 16:21   #24  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Не уверен, но попробуйте так
X++:
ComDispFunction funcGet;
    COMVariant varRet1;
    COMVariant varRet2;
...
    funcGet = new ComDispFunction(com, "LinkTest", COMDispContext::Method);
    varRet1  = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_BSTR);
    varRet2  = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_INT);
    funcGet.call(varRet1, varRet2);
    data = varRet.bStr();
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (1).
Старый 26.12.2006, 16:31   #25  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
Указанный аргумент [retval] должен быть последним параметром в вызове метода 'LinkTest'
Старый 26.12.2006, 16:33   #26  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
умаялсо. хотел сделать красиво. но, видимо, придётся делать через внешний временный файл.

огромное спасибо за участие )
Старый 26.12.2006, 16:34   #27  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Попробуйте для varRet1 установить COMVariantInOut::Out
__________________
Axapta v.3.0 sp5 kr2
Старый 26.12.2006, 16:45   #28  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
говорит, что не может преобразовать один или более аргументов
Старый 26.12.2006, 20:28   #29  
fomenka is offline
fomenka
Участник
 
97 / 14 (1) ++
Регистрация: 25.02.2003
Цитата:
Сообщение от doo Посмотреть сообщение
Function LinkTest(vfCptModel) As Integer
Вы можете вызвать его через VB/VBA? И выложить здесь? Тогда останется перевести на X++ ваш код - с чем вам здесь помогут. Или, второй вариант, саму компоненту выложить? А то тема в стиле "угадает ли AndyD, что кушает ваш зверь?" не дала быстрого результата
Старый 27.12.2006, 09:29   #30  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
c dll'ками шёл пример. вот шмат макроса из экселевского примера:

X++:
Dim Cpt As Object

Private Sub LinkTestMacros()
    'Проверка связи
    Dim CptModel As Variant

    le = Cpt.LinkTest(CptModel)
    If (le <> 0) Then
        ActiveSheet.Cells(11, 7) = "Ошибка"
        ActiveSheet.Cells(12, 7) = Str(le)
        Exit Sub
    Else
        ActiveSheet.Cells(11, 7) = "CPT"
        ActiveSheet.Cells(12, 7) = CStr(CptModel)
    End If
End Sub
Старый 27.12.2006, 09:45   #31  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Еще один вариант
X++:
    ComVariant  var = new ComVariant(ComVariantInOut::out, ComVariantType::VT_Variant);
    ComVariant  var1 = new ComVariant(ComVariantInOut::out, ComVariantType::VT_BSTR);
    ;
...
    var.variant(var1);
    res = com.LinkTest(var);
    data = var1.bStr();
    info(data);
2 fomenka
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: gl00mie (3).
Старый 27.12.2006, 09:57   #32  
doo is offline
doo
Участник
 
41 / 10 (1) +
Регистрация: 05.11.2004
алилуйа...

не знаю, как выразить Вам свою благодарность )
Старый 27.12.2006, 10:46   #33  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Если кому интересно, прототип функции IDL выглядит примерно так
X++:
    HRESULT _stdcall LinkTest([out] VARIANT * vfCptModel, [out, retval] int * Ret );
Вся фишка здесь в типе параметра VARIANT *, т.е. необходимо передавать ссылку на вариантный тип
Если бы использовалась просто строка
X++:
    HRESULT _stdcall LinkTest([out] BSTR * vfCptModel, [out, retval] int * Ret );
, то можно было бы просто передавать в вызов функции переменную var1 из предыдущего примера
X++:
    ComVariant  var1 = new ComVariant(ComVariantInOut::out, ComVariantType::VT_BSTR);
    ;
...
    res = com.LinkTest(var1);
    data = var1.bStr();
    info(data);
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Dimonishe (1).
Старый 29.01.2007, 20:17   #34  
Dimonishe is offline
Dimonishe
Участник
 
33 / 10 (1) +
Регистрация: 24.05.2005
Адрес: Донецк/Москва
сейчас вот тоже страдаю с этим же самым COM объектом. Спасибо большое. Сэкономили кучу времени и нервов. Потому как linkTest у меня тоже не работал.

Только вот теперь другая проблема.. Пытаемся добавить запись. Описание функции из VBA

Function AddRecord(nTsdFieldCount As Integer, Field1, Field2, Field3, Field4, Field5, Field6, Field7, Field8) As Integer

есстественно вот это не работает

X++:
com.AddRecord(3,"123","1","0")
Метод 'AddRecord' в COM-объекте класса 'ScCt.Cpt' возвратил код ошибки 0x80020005 (DISP_E_TYPEMISMATCH), который означает: Один или большее количество аргументов не мог быть преобразовано.


похоже придется опять что-то шаманить с variantom.

навскидку

X++:
    ComVariant  var2 = new ComVariant(ComVariantInOut::In, ComVariantType::VT_Variant);
    ComVariant  var3 = new ComVariant(ComVariantInOut::In, ComVariantType::VT_INT);

    var3.int(3);
    var2.variant(var3);
    Cpt.AddRecord(var2,"1","0");
не прошло...


теперь вот думаю как получить IDL прототипа? а?
Старый 30.01.2007, 13:14   #35  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Откройте Ваш ocx файл утилитой OleView из MS Visual Studio, там все будет написано
За это сообщение автора поблагодарили: Logger (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Мониторинг состояния COM объекта axaLearner DAX: Программирование 5 10.04.2008 16:39
E-mail в Аксапте 3.0 с помощью CDO.Message COM объекта custtable DAX: Программирование 4 12.02.2008 10:31
Проблема с получение коллекции (массива) из COM-объекта. VES DAX: Программирование 6 24.03.2006 18:59
Передача массива в метод COM-объекта Вадим DAX: Программирование 6 24.01.2005 12:31

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

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

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