IEnumVARIANT и граница процесса
От: Vopilka  
Дата: 28.11.01 19:28
Оценка:
Я в первый раз в этом форуме,и хочу обратится за помощью(все когда-то бывает в первый раз:) )
Надеюсь новеньких не бьете?:)))

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

Дальше идут вызовы pEnum->Next(...) и т д
и как раз эти методы не хотят вызыватся — дают ошибку "the Value of ESP was properly saved accross a function call..."
У меня есть только одна версия происходящего — это происходит из-за того что вызов идет через границу процесса, а на IEnumVariant нету Proxy/Stub объекта, потому что в пределах одного процесса все работает нормально.

Можно ли как-то это исправить кроме как создавать спец. отдельный класс перчисления в dll и в get_newEnum создавать именно его, а внутри этого классая уже перенаправлять вызовы на объект созданный с помощью CComEnum....
или может проблема в чем то другом?
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
Re[2]: IEnumVARIANT и граница процесса
От: Vopilka  
Дата: 30.11.01 11:25
Оценка:
Здравствуйте Alex Fedotov

спасибо большое за подсказку!Все работает:)
Я как обычно полезла не в те дебри:(
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.