Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / COM-интерфейсы объектов. Need help! / 19 сообщений из 19, страница 1 из 1
08.04.2011, 12:03
    #37206341
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
Добрый день! Столкнулся с такой интересной задачкой. Все объекты, который доступны во внешнем соединении, предоставляют IDispatch интерфейс (ну и IUnknown конечно). Через dispatch я могу обращаться к свойствам и методам объектов, который заявлены в help-е. Тут все ОК. Но есть такая штука как "Для каждого … Из … Цикл" и перебор по индексу через квадратные скобки [...]. Как я понимаю они используют не IDispatch, а что-то еще.

Вопрос: какой интерфейс они используют?

Зачем это нужно: Берем объект "структура". У него есть Вставить (Insert), Количество (Count), Очистить (Clear), Свойство (Property), Удалить (Delete) и свойства обращения по имени ключа. Но что делать если имена ключей неизвестны и надо их перебрать? Вот тут, как я понимаю, и помогает "Для каждого … Из … Цикл"
...
Рейтинг: 0 / 0
08.04.2011, 13:44
    #37206655
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
это практический вопрос или хочу все знать?
...
Рейтинг: 0 / 0
08.04.2011, 13:52
    #37206668
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
Naf,

Практический. Пример со "структурой" я привел для простоты.
...
Рейтинг: 0 / 0
10.04.2011, 19:35
    #37209015
BestProgrammist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
...
Рейтинг: 0 / 0
10.04.2011, 19:44
    #37209021
pavel_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
при использовании "Для каждого … Из … Цикл" перебор идет по массиву с одним типом данных, в COM объекте сами понимаете поля разных типов.
А стуктура "Для каждого … Из … Цикл" если не ошибаюсь реализуется через IEnumerator
...
Рейтинг: 0 / 0
11.04.2011, 09:45
    #37209380
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
BestProgrammist http://msdn.microsoft.com/en-us/library/ms691212(v=VS.85).aspx
Дык и?

pavel_nv,
Вот это уже теплее. Но насколько я знаю IEnumerator это .Net-вский интерфейс, а 1С не использует .Net (могу ошибаться). Теперь далее, даже если энумератор есть, то вопрос: его надо получать через какой-то метод или проперти? (Т.к. эксперимент показал что 1С-коллекции не откликаются (не наследуют) ICollection и ниже.
...
Рейтинг: 0 / 0
11.04.2011, 10:45
    #37209502
BestProgrammist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
[quot IgorKonovalov]BestProgrammist http://msdn.microsoft.com/en-us/library/ms691212(v=VS.85).aspx
Дык и?

Вм ничего не говорит такая строка?

The IEnumUnknown interface inherits from the IUnknown interface.
...
Рейтинг: 0 / 0
11.04.2011, 11:19
    #37209574
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
BestProgrammist,

Говорит: что IEnumVARIANT наследуется от IUnknown. Это факт. А как получить то объект с IEnumVARAINT?
...
Рейтинг: 0 / 0
11.04.2011, 11:23
    #37209591
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
BestProgrammist,

Извиняй, невнимательно прочитал, зациклился уже. Не IEnumVARAINT, а IEnumUnknown. Но все равно говорит что No such interface supported. [0x80004002]. Может этот объект с этим интерфейсом надо как-то получать из "корневого" объекта?
...
Рейтинг: 0 / 0
11.04.2011, 11:31
    #37209608
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
Есть еще вот такая аксиома http://msdn.microsoft.com/en-us/library/ms221354.aspx, но обратиться к свойству _NewEnum через IDispatch, почему-то тоже не получается.

Собственно к этому я пришел с отсылок к IEnumVARIANT из ИТС. Правда там все равно несказанно как им пользоваться.
...
Рейтинг: 0 / 0
11.04.2011, 11:33
    #37209614
BestProgrammist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
IgorKonovalov,

Сдаюсь :D
а просто прочитать документацию msdn? перейти в описание IUnknown и увидеть метод

QueryInterface()
Retrieves pointers to the supported interfaces on an object.


ну или вот первая ссылка из гугля

http://www.rsdn.ru/forum/com/41246.flat.aspx
...
Рейтинг: 0 / 0
11.04.2011, 11:38
    #37209631
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
BestProgrammist,
Рано сдаваться )))

Да все правильно, queryInterface. Но сам объект не обладает интерфейсом IEnumUnknown (No such interface supported. [0x80004002]). Как я понимаю чтобы получить у основного объекта объект энумератор, нужно его получить из свойства или вызовом метода.
...
Рейтинг: 0 / 0
11.04.2011, 11:41
    #37209644
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
IgorKonovalov,

и кстати, почему из все интерфейсов коллекций Вы выбрали IEnumUnknown? А не ICollection, IList или IEnumVARIANT
...
Рейтинг: 0 / 0
11.04.2011, 11:46
    #37209659
BestProgrammist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
IgorKonovalov,

Если ваш com-подопытный не реализует итератор то нужно подробее смотреть что за фрукт.
Чуть выше простакивало ваше упоминание про ICollection?
Для такого интерфейса должен быть метод GetEnumeration(), но это уже домыслы.
...
Рейтинг: 0 / 0
11.04.2011, 11:51
    #37209672
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
BestProgrammist,

Попробовал. GetEnumeration нет такого. В документации по 1С упоминается IEnumVARAINT, но как им пользоваться непонятно. На msdn нашел такую статью по имплементации этого интерфейса ( http://msdn.microsoft.com/en-us/library/ms221354.aspx). Но свойства _NewEnum что-то не находится.
...
Рейтинг: 0 / 0
11.04.2011, 12:06
    #37209707
BestProgrammist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
IgorKonovalov,

Наличие какого интерфейса коллекции показывает QueryInterface?
...
Рейтинг: 0 / 0
11.04.2011, 12:12
    #37209727
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
BestProgrammist,

Запрашивал ICollection, IList, IEnumerable, IEnumerator, IDictionary, IEnumVariant, IEnumUnknown все мимо. Откликается только на IDispatch и IUnknown что для automation-объекта естественно.
...
Рейтинг: 0 / 0
11.04.2011, 13:11
    #37209892
BestProgrammist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
IgorKonovalov,

странно, либо не то дергаете либо ошибка платформы, либо задача не ясна.
P.S.
На 8.1 в ВК через query прекрасно обходились структуры.
...
Рейтинг: 0 / 0
11.04.2011, 13:27
    #37209922
IgorKonovalov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM-интерфейсы объектов. Need help!
BestProgrammist,

Свершилось!! И так, как и обещала 1С ее объекты поддерживают IEnumVARAINT. Стандартный метод получения объекта энумератора это через проперти _NewEnum объекта-коллекции. (Объект-коллекция != энумератор). При доступе к полю _NewEnum через getIDsOfNames у IDispatch кидалась ошибка, что мол такого свойства нет. Но! По феншую Microsoft у этого поля фиксированный ID в IDispatch и оно равно '-4'. Так вот если обращаться к этому полю по ID, энумератор нормально возвращается. Биного!!!
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / COM-интерфейсы объектов. Need help! / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]