09.10.2002, 19:31 | #1 |
NavAx
|
Передача массива 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 ... или я неправ? |
|
|
Похожие темы | ||||
Тема | Ответов | |||
передача массива | 21 | |||
Передача переменного числа параметров в метод | 16 | |||
Передача массива в .Net | 1 | |||
Передача массива в метод COM-объекта | 6 | |||
передача ссылки на метод | 5 |
|