I
ivs4
Здравствуйте. Возникла мледующая проблема. Имется интерфейс Dispath полученный в основном потоке через GetObject. Есть стороння библиотека которая реализует в себе реакции на некие события через CallBack ф-цию. Хочу выоплнить в этом CallBack метода COM объекта через известный диспатч. Предположил, что CallИфсл работает в новом потоке, поэтому испльзовал маршалинг. НО, при работе в CallBack ф-ции вываливаются то на Invoke, то на CoUnmarshalInterface.
ошибка на Invoke
0x80010108 Вызванный объект был отключен от клиентов.
ошибка на CoUnmarshalInterface
0x800401FD Объект не подключен к серверу
У меня уже был опыт работы с маршаигом и раньше проблем не возникало. Писал интерфейс в стрим и в потоке восстанавливал его. Помогите в решении проблемы или дайте совет где искать.
глобальная переменная
Основной поток
CallBack ф-ция
ошибка на Invoke
0x80010108 Вызванный объект был отключен от клиентов.
ошибка на CoUnmarshalInterface
0x800401FD Объект не подключен к серверу
У меня уже был опыт работы с маршаигом и раньше проблем не возникало. Писал интерфейс в стрим и в потоке восстанавливал его. Помогите в решении проблемы или дайте совет где искать.
глобальная переменная
Код:
IStream *stream4;
Основной поток
Код:
hres=CoGetObject(bwscpath, NULL, IID_IDispatch, (void**) &disp4);
hres=CoMarshalInterThreadInterfaceInStream(IID_IDispatch,disp4,&stream4);
CallBack ф-ция
Код:
IDispatch *disp4;
LARGE_INTEGER v;
v.QuadPart=0;
hres=stream4->Seek(v,STREAM_SEEK_SET,NULL);
hres=CoUnmarshalInterface(stream4,IID_IDispatch,(void**)&disp4);
hres=disp4->Invoke(func4conSTATE,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_METHOD,¶ms4,&varResult,NULL,NULL);