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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.07.2004, 15:47   #1  
TravellerInTime is offline
TravellerInTime
Участник
Аватар для TravellerInTime
 
130 / 36 (2) +++
Регистрация: 14.07.2003
Адрес: Россия, Тула
Variant Array и метод COM обекта
Что надо сделать, чтобы пердать Variant Array как параметр в метод COM обекта?
Старый 07.07.2004, 16:15   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Поиск помнит все: http://www.axforum.info/forums/showt...&threadid=1161

Направление там в принципе правильное, почем не получилось - не знаю.
Но смотрите в этом направлении.
Старый 07.07.2004, 16:37   #3  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
ComVariant::createFromArray(),
но массив должен быть одномерным.
Старый 07.07.2004, 16:41   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Изначально опубликовано Андре
Поиск помнит все: http://www.axforum.info/forums/showt...&threadid=1161

Направление там в принципе правильное, почем не получилось - не знаю.
Потому что вместо

PHP код:
COMVariant cv= new COMVariant COMVariantInOut::IN_OUT,ComVariantType::VT_VARIANT); 
надо использовать

PHP код:
COMVariant cv= new COMVariant COMVariantInOut::IN_OUT,COMVariantType::VT_SAFEARRAY); 
Старый 08.07.2004, 08:22   #5  
TravellerInTime is offline
TravellerInTime
Участник
Аватар для TravellerInTime
 
130 / 36 (2) +++
Регистрация: 14.07.2003
Адрес: Россия, Тула
2Андре видел я это все и смотрел в этом направлении, но увы...

Вот мой код:
PHP код:
COMVariant a = new ComVariant(COMVariantInOut::INCOMVariantType::VT_SAFEARRAY);
Array 
arr;

arr = new Array(Types::Integer);
arr.value(10);
arr.value(20);
a.safeArray(arrCOMVariantType::VT_VARIANT);
cell cellSet.Item(a); 
Ругается на неверные параметры при вызове Item.

Давайте обратимся к описанию метода, который мне нужно вызвать:
[id(00000000), propget, vararg, helpcontext(0x00315634)]
Cell* Item([in] SAFEARRAY(VARIANT)* idx);

Обратите внимание, что idx передается по ссылке - может быть в этом проблема?
Например в C# я писал cellSet.get_Item(ref coords) - есть ли какой-нибудь аналог ref в X++?
Старый 08.07.2004, 13:44   #6  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
А если так попробовать?
PHP код:
COMVariant a;
Array 
arr;
;
arr = new Array(Types::Integer);
arr.value(10);
arr.value(20);
ComVariant::createFromArray(arr),
cell cellSet.Item(a); 
Старый 08.07.2004, 14:40   #7  
TravellerInTime is offline
TravellerInTime
Участник
Аватар для TravellerInTime
 
130 / 36 (2) +++
Регистрация: 14.07.2003
Адрес: Россия, Тула
Цитата:
Изначально опубликовано dn
А если так попробовать?
Так я тоже пробовал, но увы...
Да и если верить дебагеру, то действия
a = ComVariant::createFromArray(arr);
и
a.safeArray(arr);
эквивалентны.

Есть такое ощущение, что Аксапта не корректно отдает массив в COM...
Старый 08.07.2004, 14:50   #8  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Изначально опубликовано TravellerInTime
Есть такое ощущение, что Аксапта не корректно отдает массив в COM...
Возможно, но я в своё время строковый массив передавал в Excel через com. А что если попробовать преобразовать строковый, а не целый (int) массив в вариантный, и передавать его?
Старый 08.07.2004, 15:24   #9  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Попробую предложить ещё один вариант. За работоспособность правда не ручаюсь
PHP код:
COMVariant a;
array 
arr = new array (types::class);
;
arr.value(1,COMVariant::createFromInt(0));
arr.value(2,COMVariant::createFromInt(0));
ComVariant::createFromArray(arr),
cell cellSet.Item(a); 
Старый 09.07.2004, 08:11   #10  
TravellerInTime is offline
TravellerInTime
Участник
Аватар для TravellerInTime
 
130 / 36 (2) +++
Регистрация: 14.07.2003
Адрес: Россия, Тула
Цитата:
Изначально опубликовано dn
Возможно, но я в своё время строковый массив передавал в Excel через com.
А что в описании интерфейса значится: массив строк или массив вариантов?
Цитата:

А что если попробовать преобразовать строковый, а не целый (int) массив в вариантный, и передавать его?
Мыслим мы одинаково! Пробовал я это! Результат неизменен.
Старый 09.07.2004, 08:13   #11  
TravellerInTime is offline
TravellerInTime
Участник
Аватар для TravellerInTime
 
130 / 36 (2) +++
Регистрация: 14.07.2003
Адрес: Россия, Тула
Цитата:
Изначально опубликовано dn
Попробую предложить ещё один вариант. За работоспособность правда не ручаюсь
А вот это я попробовал в самую первую очередь!
Старый 09.07.2004, 11:13   #12  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Изначально опубликовано TravellerInTime

А что в описании интерфейса значится: массив строк или массив вариантов?
[propget, helpcontext(0x00010006)]
HRESULT _stdcall Value(
[in, lcid] long lcid,
[out, retval] VARIANT* RHS);
[propput, helpcontext(0x00010006)]
HRESULT _stdcall Value(
[in, lcid] long lcid,
[in] VARIANT RHS);

p.s. насчет твоего случая у меня идеи закончились...
Теги
array, x++

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
msdynamicsax: VB script that test the com connector for Dynamics Ax 4.0 Blog bot DAX Blogs 0 25.08.2008 18:05
Метод 'SendMail' в COM-объекте класса 'Dundas.mailer' возвратил код ошибки 0x80004005 (E_FAIL), который означает: The HELLO command failed. Andrew Akhmetov DAX: Программирование 4 09.04.2008 13:24
Передача массива в метод COM-объекта Вадим DAX: Программирование 6 24.01.2005 12:31

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

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

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