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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.05.2003, 17:11   #1  
VES is offline
VES
Участник
 
9 / 10 (1) +
Регистрация: 02.04.2003
Проблема с получение коллекции (массива) из COM-объекта.
Уважаемые коллеги!

Просьба помочь в таком нетривиальном вопросе, как получение из COM-объекта коллекции.

Есть COM-объект, у которого есть метод Items - коллекция.
Когда получаю элементы этой коллекции, к примеру, на VB,

DIM obj as Variant
For Each obj In ComObj.Items
MsgBox obj.Name
Next

все работает отлично.

Когда я пытаюсь сделать то же самое из Аксапты, делаю так:

COMVariant cv = ComObj.Items();

то cv - пустой вариант ((

Так как же мне получить коллекцию, какой тип использовать слева от присваивания???

Попытки Container и COM[] - не проходят...
Старый 30.05.2003, 10:37   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
У меня была такая же проблема. Вот здесь: http://www.axforum.info/forums/showt...ghlight=Source

Там в самом конце, я описываю возникшие проблемы. В том числе там есть код с констукцией for each.
Перевести на Аксапту я его тоже не смог
Но там же я привел этот же код на VC(ATL) - посмотри, может натолкнет на какие-нибудь мысли.
На самом деле там используются enum'ераторы (правильнее наверное итераторы . VB конструкция "for each" красиво прячет от программиста эту сложность/тонкость. Не Аксапта, не VC не предоставляют такой возможности, поэтому наверное стоит смотреть на VC реализацию и думать, как это реализовать в Аксапте.
Если все-таки решишь эту проблему - пожалуйста, сообщи мне. Буду очень благодарен.
Старый 30.05.2003, 10:56   #3  
LTA is offline
LTA
Участник
 
94 / 10 (1) +
Регистрация: 27.01.2003
В интрефейсах COM у объекта может стоять по умолчанию какое то свойство, которое вызывается.. при доступе к данному объекту, Visual Basic автоматически обращается к этому свойству, например мы можем писать

o.Items(2)
и Visual Basic автоматом берет значение свойства по умолчанию у объекта Items

а в Аксапте нужно писать
COMVariant v;
COM items;
items = o.Items(2);
v = items.Value;

я не уверен но может быть поможет
Старый 30.05.2003, 11:59   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
В моем случае это не помогло

Вообще-то в Аксапте есть классы ComEnum2Object и ComEnum2Variant. Вот что написано про первый из них:

Цитата:
The COMEnum2Variant class is used to enumerate a collection of COM objects. COM Automation objects often use collections. The COM objects that are found in the collection must support COM Automation to be useful in Axapta.
Но заставить его работать в моем случае я так и не смог

По-моему он так какие-то ошибки постоянно выбрасывал...
Старый 30.05.2003, 12:07   #5  
VES is offline
VES
Участник
 
9 / 10 (1) +
Регистрация: 02.04.2003
Точно-точно
Да, абсолютно верно, у меня тоже самое, пишет "Метод был вызван с неверным параметром" - это он ругается на o.Items(2)
Старый 24.03.2006, 18:46   #6  
Dronas is offline
Dronas
Участник
 
213 / 14 (1) ++
Регистрация: 16.11.2004
ComEnum2Object

Всё замечательно работает, просто объект надо создавать через COM::getObjectEx()...

Не знаю, может я не о том, но:

COM objNamespace, objDomain;
COMEnum2Object COMEnum;

objNamespace = COM::getObjectEx("WinNT:");
objNamespace.Filter("domain");

COMEnum = new COMEnum2Object(objNamespace);
objDomain = COMEnum.getFirst();

while (objDomain)
{
info(objDomain.Name());
objDomain = COMEnum.getNext();
}
Старый 24.03.2006, 18:59   #7  
Jabberwocky is offline
Jabberwocky
Microsoft Dynamics
Аватар для Jabberwocky
Сотрудники Microsoft Dynamics
 
274 / 307 (11) ++++++
Регистрация: 02.09.2005
Адрес: Москва
Попробуйте написать следующим образом:
Код:
COMVariant itemVariant;
COM items;
items = ComObject.Items();
itemVariant = items.item(2);
И еще советую посмотреть для примера метод ComExcelDocument_RU::deleteRow, там как раз идет обращение к коллекции Rows на рабочем листе Excel

Последний раз редактировалось Jabberwocky; 24.03.2006 в 19:01.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с импортом из Excel через COM Romsrs DAX: Программирование 18 10.06.2008 10:34
Мониторинг состояния COM объекта axaLearner DAX: Программирование 5 10.04.2008 16:39
Передача агументов в функцию com объекта doo DAX: Программирование 34 30.01.2007 13:14
Передача массива в метод COM-объекта Вадим DAX: Программирование 6 24.01.2005 12:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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