Уважаемые, дамы и господа!
Помогите, пожалуйста, не могу никак разобраться с маршалингом интерфейса во вторичный поток ActiveX компонента. Суть в следующем:
Создаю c помощью ATL ActiveX: Full control, apartment, dual interface, поддержка IConnectionPoint. У компонента, кроме прочих, есть метод Open() и есть событие OnOpen(). Метод Open() запускает вторичный поток, в котором происходит какая-то работа, и сам завершается. Так вот, после того, как вторичный поток произведет все необходимые действия, компонент должен генерировать событие OnOpen(), или OnError(). Кроме того, есть интерфейс IFire, который наследуется моим коклассом, и в котором есть метод FireOnOpen(). Этот метод просто вызывает сгенерированный визардом Fire_OnOpen:
STDMETHOD(FireOnOpen)(BYTE bIsTerminal)
{
this->Fire_OnOpen(bIsTerminal);
return S_OK;
}
Делаю я это так:
IStream *g_pStream;
UINT __stdcall ThreadOpen(void* pParam)
{
HRESULT res = 0;
IFire* pFire = NULL;
res = CoInitialize(NULL);
res = CoGetInterfaceAndReleaseStream(g_pStream, IID_IFire, (void**)&pFire);
g_pStream = NULL;
// полезная работа...
pFire->FireOnOpen(1);
CoUninitialize();
return 0;
}
STDMETHODIMP MyClass::Open()
{
UINT ui;
HRESULT res = 0;
IFire* pFire = NULL;
res = this->QueryInterface(IID_IFire, (void**)&pFire);
res = CoMarshalInterThreadInterfaceInStream(IID_IFire, pFire, &g_pStream);
_beginthreadex(NULL, 0, ThreadOpen, NULL, 0, &ui);
return S_OK;
}
Так вот, метод Open() выполняется без проблем, инициализируется g_pStream, создается поток, а вот внутри потока все валится на ф-ии CoGetInterfaceAndReleaseStream() с кодом 0x80004005

Пожалуйста, подскажите, что я не так делаю?
Заранее благодарен.
SergT.
P.S. Отлаживаю в ActiveX Control Test Container.