IWebBrowser2调用get_Script引起程序崩溃
傻嘚小青年 2016-11-03 09:57:59 目前在C++项目中,需要调用JS界面的方法(轮询调用)。在线程中调用get_Script时,引起程序崩溃。
应该如何解决?代码如下
if ( NULL == m_pWebBrowser )
return false;
CComPtr<IDispatch> pDoc;
HRESULT hr = m_pWebBrowser->get_Document(&pDoc);
if ( FAILED(hr) )
return false;
CComQIPtr<IHTMLDocument2> pDoc2 = pDoc;
if ( NULL == pDoc2 )
return false;
CComQIPtr<IDispatch> pScript;
hr = pDoc2->get_Script(&pScript); pScript = 0x00000000 如果在按钮点击中调用就不会出现该问题。
if ( FAILED(hr) )
return false;
DISPID id = NULL;
CComBSTR bstrFun(lpJsFun.c_str());
hr = pScript->GetIDsOfNames(IID_NULL, &bstrFun, 1, LOCALE_SYSTEM_DEFAULT, &id);
if ( FAILED(hr) )
return false;
DISPPARAMS dispParams;
memset(&dispParams, 0, sizeof(DISPPARAMS));
int nParamCount = params.size();
if ( nParamCount > 0 )
{
dispParams.cArgs = nParamCount;
dispParams.rgvarg = new VARIANT[nParamCount];
for (int i=0; i<nParamCount; ++i )
{
const wstring& str = params[nParamCount-1-i];
CComBSTR bstr(str.c_str());
bstr.CopyTo(&dispParams.rgvarg[i].bstrVal);
dispParams.rgvarg[i].vt = VT_BSTR;
}
}
EXCEPINFO execInfo;
memset(&execInfo, 0, sizeof(EXCEPINFO));
VARIANT vResult;
UINT uArgError = (UINT)-1;
hr = pScript->Invoke(id, IID_NULL, 0, DISPATCH_METHOD, &dispParams, &vResult, &execInfo, &uArgError);
delete[] dispParams.rgvarg;
if ( FAILED(hr) )
return false;
return true;