在多线程中使用 IHTMLDocument2 指针

时间:2021-07-16 20:33:33

问题:

     在多线程中使用IHTMLDocument2 指针会出现错误

 

解决:

 

    使用列集,散集来传递IHTMLDocument2 指针。

 

    声明全局变量IStream *pStream;

1、

    将pHTMLDocument指针传递给pStream。

 

    CoMarshalInterThreadInterfaceInStream(IID_IHTMLDocument2, pHTMLDocument, &pStream);

     HANDLE hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Capture, this, 0, NULL);

 

2、

     将pStream传递给pHTMLDocument指针就可以使用了。

 

UINT CCaptureDlg::Capture(LPVOID p)
{
 CoInitialize(NULL);

 CCaptureDlg * self = (CCaptureDlg *) p;

 IHTMLDocument2 *pHTMLDocument;

 

 HRESULT hr = ::CoGetInterfaceAndReleaseStream(self->pStream, IID_IHTMLDocument2, (void**)&pHTMLDocument );

 

 BSTR   bstr_title, bstr_url;
 pHTMLDocument->get_title(&bstr_title);
 pHTMLDocument->get_URL(&bstr_url);

 

...

 

}