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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.10.2002, 19:31   #1  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Передача массива VARIANTов в Automation метод
Есть проблема - нужно передать массив VARIANTов в метод объекта COM Automation.
Этот метод ожидает только это.
Я уже решил эту задачу даже на Visual C и API, но как это сделать на Аксапте?

Вот последовательность действий:
1. Создаем временный VARIANT.
2. Создаем SAFEARRAY.
3. Устанавливаем ему границы и заполняем, используя VARIANT, созданный в 1.
4. Создаем еще VARIANT с типом VT_ARRAY | VT_VARIANT.
5. Заносим в поле .parray VARIANTа, созданного в 4 дескриптор SAFEARRAYя.
6. Вызываем метод Automation с аргументов VARIANT из п 4.

Вот как выглядит последняя попытка на Axapta:

COMVariant cv= new COMVariant COMVariantInOut::IN_OUT,ComVariantType::VT_VARIANT);
Array myArray = new Array(Types::CLASS);
cv.int(4);
myArray.value(1,cv);
cv.bStr("My data");
myArray.value(2,cv);
cv.safeArray(intArray,ComVariantType::VT_VARIANT);
myobject.ThisTrickyMethod(cv); //calling Automation object method
// there's no difference, use COMDispFunction or not, result the same...

Этот объект Automation возвращает в Axapta ошибку:
"Функция ThisTrickyMethod возвратила код ошибки 0xDISP_E_TYPEMISMATCH,
что означает "Один или более параметров не могут быть преобразованы"".
Я знаю, что элементы этого массива уже не VARIANTы, но это последняя из многих моих попыток...

Я пробовал создавать VARIANTы как Binary(12) и т.д.., создавать и заполнять все структуры через вызовы API, как я делеал на C... все OK.
НО!.. когда я передаю VARIANT, созданный в Binary, в этот метод, Axapta показывает message box "Метод ThisTrickyMethod вызван с неправильными параметрами".

Главная проблема в том, что COMVariant не позволяет напрямую изменять свое содержание(т.е. структуру VT_VARIANT), чтобы установить поле .parray дескриптором созданного SAFEARRAY. ИЛИ, как-то провести преобразование типа Binary как VARIANT при вызове этого метода...

Этоот метод ожидает массив VARIANTов, но я не могу создать такую структуру данных в Axapta ... или я неправ?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача массива sev DAX: Программирование 21 19.03.2015 07:36
Передача переменного числа параметров в метод lemchey_white DAX: Программирование 16 14.12.2009 21:21
Передача массива в .Net monk DAX: Программирование 1 02.09.2008 13:55
Передача массива в метод COM-объекта Вадим DAX: Программирование 6 24.01.2005 12:31
передача ссылки на метод Антон Солдатов DAX: Программирование 5 14.07.2003 13:58

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

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

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