Странная работа IEnumVARIANT в .NET
От: BoresExpress Россия  
Дата: 07.12.06 13:35
Оценка:
Есть, написанная мной, COM-коллекция, реализующая NewEnum.

Из скриптов енумиратор в этой коллекции работает нормально.

Если делать foreach по этой коллекции и .NET, то первый раз всё работает нормально, а затем так, как будто коллекция пуста.

Если посмотреть из COM-объекта, то get_NewEnum вызывается, а IEnumVARIANT у полученного интерфейса не запрашивается, сразу делается Release.

Почему так?
Re: Странная работа IEnumVARIANT в .NET
От: BoresExpress Россия  
Дата: 07.12.06 14:51
Оценка:
BE>Почему так?

Разобрался.

Дело в том, что get_NewEnum у меня возвращает IUnknown самой коллекции. А вот когда из него делают QI для какого-нибудь IEnumXXXX, то создаётся новый объект, реализующий этот интерфейс (сделано через COM_INTERFACE_ENTRY_TEAR_OFF).

Поэтому он мне каждый раз возвращает один и тот же IEnumVARIANT. Если сделать на нём Reset, то всё работает нормально.

Вообще, это не очень здорово. .NET мог бы и сам вызывать Reset, для избежания подобных недоразуманий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.