Я в первый раз в этом форуме,и хочу обратится за помощью(все когда-то бывает в первый раз:) )
Надеюсь новеньких не бьете?:)))
у меня есть 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....
или может проблема в чем то другом?
Здравствуйте 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, думаю и у тебя также написано
А после того как в клиенте ты получил интерфейсный указатель, ты явно запросил IEnumVARIANT, или просто скастировал указатель? В этом как раз и может быть проблема.
V>У меня есть только одна версия происходящего — это происходит из-за того что вызов идет через границу процесса, а на IEnumVariant нету Proxy/Stub объекта, потому что в пределах одного процесса все работает нормально.