Re: IEnumVARIANT и граница процесса
От: Alex Fedotov США  
Дата: 29.11.01 04:20
Оценка:
Здравствуйте Vopilka, Вы писали:

V>у меня есть 2 COM сервера dll и EXE.(ATL)

V>они живут в разных процессах.
V>в EXE сервер передается интерфейс объекта назовем его pTEST, находящегося в dll(в другом процессе).
V>в EXE сервере мне нужен интерфейс перечисления этого TEST, и я через вызов метода get_newEnum, в котором создается объект перечисленияс помощью
V> CComObject< CComEnum<IEnumVARIANT,&IID_IEnumVARIANT,VARIANT,_Copy<VARIANT> > >
V>и т д и возвращаю этот самый pEnum.

V>Дальше идут вызовы pEnum->Next(...) и т д

V>и как раз эти методы не хотят вызыватся — дают ошибку "the Value of ESP was properly saved accross a function call..."

Как описано в .idl свойство _NewEnum, через которое возвращается IEnumVARIANT? Стандартно оно описывается как возвращающее IUnknown, думаю и у тебя также написано

[id(DISPID_NEWENUM), propget, restricted, hidden]
HRESULT _NewEnum([out, retval] IUnknown ** ppUnk);

А после того как в клиенте ты получил интерфейсный указатель, ты явно запросил IEnumVARIANT, или просто скастировал указатель? В этом как раз и может быть проблема.

V>У меня есть только одна версия происходящего — это происходит из-за того что вызов идет через границу процесса, а на IEnumVariant нету Proxy/Stub объекта, потому что в пределах одного процесса все работает нормально.


Для IEnumVARIANT есть proxy/stub.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.