C++ 与js 2

来源:互联网 发布:ubuntu搭建openstack 编辑:程序博客网 时间:2024/05/17 10:55
bool ExecJsFun( const wstring& lpJsFun, const std::vector<wstring>& params ,IWebBrowser2*  pIWb)  {  CComPtr<IWebBrowser2>   wb  =pIWb;if ( NULL == wb )  return false;  CComPtr<IDispatch> pDoc;  HRESULT hr = wb->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);  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());  hr = 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;  }  
<pre name="code" class="cpp">
调用:
std::wstring  szFun;std::vector<std::wstring>  vParam;szFun.assign(L"test");vParam.push_back(L"songsIndex[0]&songsIndex[1]&songsIndex[2]");ExecJsFun(szFun,vParam,wb);



0 0