3,248
社区成员




STDMETHODIMP CXXX::SetWindow(VARIANT vtWindow)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
if(vtWindow.vt != VT_DISPATCH)
{
return S_FALSE;
}
CoInitialize(NULL);
vtWindow.pdispVal->QueryInterface(IID_IHTMLWindow2, (void**)&iw);
return S_OK;
}
case WM_USER://自定义窗口消息
{
OutputDebugString("执行JS函数");
VARIANT vt;
if(iw)
iw->execScript(CComBSTR(L"test()"), CComBSTR(L"javascript"), &vt);
break;
}
//class **** : public CDHtmlDialog
BOOL ****::OnCallDisp( WPARAM wParam ,LPARAM lParam )
{
BOOL Temp = TRUE;
VARIANT varRet ;
memset(&varRet,0,sizeof(VARIANT));
varRet.intVal = TRUE ;
HRESULT hr;
IHTMLDocument2 *spDoc = NULL;
hr = GetDHtmlDocument(&spDoc);
if(hr != S_OK)
{
Temp = FALSE;
varRet.boolVal = FALSE;
}
IDispatch *pDisp = NULL;
hr = spDoc->get_Script(&pDisp);
if(hr != S_OK)
{
Temp = FALSE;
varRet.boolVal = FALSE;
}
DISPID dispid;
CString str("CallJs_Component");
BSTR bstrValue = str.AllocSysString();
OLECHAR *pszFunct = bstrValue;
hr = pDisp->GetIDsOfNames(IID_NULL, &pszFunct, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if(hr != S_OK)
{
Temp = FALSE;
varRet.boolVal = FALSE;
}
DISPPARAMS* npDispParams = new DISPPARAMS;
memset( npDispParams, 0 , sizeof(DISPPARAMS));
npDispParams->cArgs = 2 ;
npDispParams->rgvarg = new VARIANT[2];
npDispParams->rgvarg[1].vt = VT_INT;
npDispParams->rgvarg[1].intVal = (int)wParam;
npDispParams->rgvarg[0].vt = VT_BSTR;
CString sendstr((char*)lParam);
npDispParams->rgvarg[0].bstrVal = sendstr.AllocSysString();
//异常处理,防止disp出现异常
try
{
hr = pDisp->Invoke(dispid,IID_NULL,0,
DISPATCH_METHOD,npDispParams,&varRet,NULL,NULL);
}
catch(...)
{
Temp = FALSE;
}
if(hr != S_OK)
{
Temp = FALSE;
varRet.boolVal = FALSE;
}
return Temp;
}