问题:
在多线程中使用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);
...
}