Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
Добрый день! Столкнулся с такой интересной задачкой. Все объекты, который доступны во внешнем соединении, предоставляют IDispatch интерфейс (ну и IUnknown конечно). Через dispatch я могу обращаться к свойствам и методам объектов, который заявлены в help-е. Тут все ОК. Но есть такая штука как "Для каждого … Из … Цикл" и перебор по индексу через квадратные скобки [...]. Как я понимаю они используют не IDispatch, а что-то еще. Вопрос: какой интерфейс они используют? Зачем это нужно: Берем объект "структура". У него есть Вставить (Insert), Количество (Count), Очистить (Clear), Свойство (Property), Удалить (Delete) и свойства обращения по имени ключа. Но что делать если имена ключей неизвестны и надо их перебрать? Вот тут, как я понимаю, и помогает "Для каждого … Из … Цикл" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2011, 12:03 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
это практический вопрос или хочу все знать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2011, 13:44 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
Naf, Практический. Пример со "структурой" я привел для простоты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2011, 13:52 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2011, 19:35 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
при использовании "Для каждого … Из … Цикл" перебор идет по массиву с одним типом данных, в COM объекте сами понимаете поля разных типов. А стуктура "Для каждого … Из … Цикл" если не ошибаюсь реализуется через IEnumerator ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2011, 19:44 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
BestProgrammist http://msdn.microsoft.com/en-us/library/ms691212(v=VS.85).aspx Дык и? pavel_nv, Вот это уже теплее. Но насколько я знаю IEnumerator это .Net-вский интерфейс, а 1С не использует .Net (могу ошибаться). Теперь далее, даже если энумератор есть, то вопрос: его надо получать через какой-то метод или проперти? (Т.к. эксперимент показал что 1С-коллекции не откликаются (не наследуют) ICollection и ниже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 09:45 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
[quot IgorKonovalov]BestProgrammist http://msdn.microsoft.com/en-us/library/ms691212(v=VS.85).aspx Дык и? Вм ничего не говорит такая строка? The IEnumUnknown interface inherits from the IUnknown interface. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 10:45 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
BestProgrammist, Говорит: что IEnumVARIANT наследуется от IUnknown. Это факт. А как получить то объект с IEnumVARAINT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 11:19 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
BestProgrammist, Извиняй, невнимательно прочитал, зациклился уже. Не IEnumVARAINT, а IEnumUnknown. Но все равно говорит что No such interface supported. [0x80004002]. Может этот объект с этим интерфейсом надо как-то получать из "корневого" объекта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 11:23 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
Есть еще вот такая аксиома http://msdn.microsoft.com/en-us/library/ms221354.aspx, но обратиться к свойству _NewEnum через IDispatch, почему-то тоже не получается. Собственно к этому я пришел с отсылок к IEnumVARIANT из ИТС. Правда там все равно несказанно как им пользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 11:31 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
IgorKonovalov, Сдаюсь :D а просто прочитать документацию msdn? перейти в описание IUnknown и увидеть метод QueryInterface() Retrieves pointers to the supported interfaces on an object. ну или вот первая ссылка из гугля http://www.rsdn.ru/forum/com/41246.flat.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 11:33 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
BestProgrammist, Рано сдаваться ))) Да все правильно, queryInterface. Но сам объект не обладает интерфейсом IEnumUnknown (No such interface supported. [0x80004002]). Как я понимаю чтобы получить у основного объекта объект энумератор, нужно его получить из свойства или вызовом метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 11:38 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
IgorKonovalov, и кстати, почему из все интерфейсов коллекций Вы выбрали IEnumUnknown? А не ICollection, IList или IEnumVARIANT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 11:41 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
IgorKonovalov, Если ваш com-подопытный не реализует итератор то нужно подробее смотреть что за фрукт. Чуть выше простакивало ваше упоминание про ICollection? Для такого интерфейса должен быть метод GetEnumeration(), но это уже домыслы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 11:46 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
BestProgrammist, Попробовал. GetEnumeration нет такого. В документации по 1С упоминается IEnumVARAINT, но как им пользоваться непонятно. На msdn нашел такую статью по имплементации этого интерфейса ( http://msdn.microsoft.com/en-us/library/ms221354.aspx). Но свойства _NewEnum что-то не находится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 11:51 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
IgorKonovalov, Наличие какого интерфейса коллекции показывает QueryInterface? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 12:06 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
BestProgrammist, Запрашивал ICollection, IList, IEnumerable, IEnumerator, IDictionary, IEnumVariant, IEnumUnknown все мимо. Откликается только на IDispatch и IUnknown что для automation-объекта естественно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 12:12 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
IgorKonovalov, странно, либо не то дергаете либо ошибка платформы, либо задача не ясна. P.S. На 8.1 в ВК через query прекрасно обходились структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 13:11 |
|
||
|
COM-интерфейсы объектов. Need help!
|
|||
|---|---|---|---|
|
#18+
BestProgrammist, Свершилось!! И так, как и обещала 1С ее объекты поддерживают IEnumVARAINT. Стандартный метод получения объекта энумератора это через проперти _NewEnum объекта-коллекции. (Объект-коллекция != энумератор). При доступе к полю _NewEnum через getIDsOfNames у IDispatch кидалась ошибка, что мол такого свойства нет. Но! По феншую Microsoft у этого поля фиксированный ID в IDispatch и оно равно '-4'. Так вот если обращаться к этому полю по ID, энумератор нормально возвращается. Биного!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 13:27 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=37209502&tid=1521433]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 440ms |

| 0 / 0 |
