描述:
我取得IwebBrowser2的指针m_pWebBrowser之后,需要把它从主线程(MainThread)中拿到另一个线程(DownThread)中使用;
于是我使用了CoMarshalInterThreadInterfaceInStream,CoGetInterfaceAndReleaseStream来封送指针;
代码如下:
在主线程中得到IwebBrowser2*pWebBrowser,然后
hrTemp = ::CoMarshalInterThreadInterfaceInStream
(
IID_IWebBrowser2, // interface ID to marshal
pWebbrowser, // ptr to interface to marshal
&pIStreamTemp // output variable
);
得到hrtemp = 0;
将pIStreamTemp保存到一个静态变量中.
然后在线程(DownThread)中取出指针:
IWebBrowser2* pWebBrowser = NULL;
hrTemp = ::CoGetInterfaceAndReleaseStream( m_Stream,IID_IWebBrowser2, (void**)&pWebBrowser );
pWebBrowser->AddRef();
取出指针后,使用它就会直接退出线程:
如:
CComBSTR readystate
pWebBrowser2->get_ReadyState(&readystate);
执行后,就跳出提示:
The thread 0xD48 has exited with code 0(0x0)
不知道什么原因,高手指点下,谢谢了.
解决方案1:
线程进行COM初始化了吗?
解决方案2:MFC DLL,用到了MFC资源等,需要在导出函数一开始加上 AFX_MANAGE_STATE(AfxGetStaticModuleState());