//IHTMLDocument2 必须包含一下三个头文件
#include <atlbase.h>
#include "atlconv.h"
#include "Mshtml.h"
using namespace ATL; //CComPtr
void CViewDialog::OnBnClickedButton2()
{
IOleClientSite* pClientSite = this->pClientSite;
HRESULT hr = S_OK; //HRESULT 是一种简单的数据类型,通常被属性和 ATL 用作返回值
IServiceProvider *isp, *isp2 = NULL;//用于导航DHTML对象层次,作用就是提供服务
IWebBrowser2 *browser;
if(!pClientSite){
if(browser!=NULL){
browser->Release();
browser = NULL;
}
return;
}else{
hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **>(&isp));
if(FAILED(hr))
{
hr = S_OK;
if(isp!=NULL)
{
isp->Release();
isp = NULL;
}
}
hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void **>(&isp2));
if(FAILED(hr))
{
hr = S_OK;
if(isp2!=NULL)
{
isp2->Release();
isp2 = NULL;
}
}
//获得浏览器
hr = isp->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&browser));
if(FAILED(hr))
{
hr = S_OK;
if(browser!=NULL)
{
browser->Release();
browser = NULL;
}
}
}
if(!browser) {
if(browser!=NULL)
{
browser->Release();
browser = NULL;
}
//CString strBrowser;
//MessageBox((strBrowser="浏览器获取失败..."));
return;
}
CComPtr<IHTMLDocument2> m_spDoc; //定义HTML的DOCUMENT
hr = browser->get_Document((IDispatch**)&m_spDoc);
if(FAILED(hr)){
throw("");
}
CComPtr<IDispatch> pScript;
hr = m_spDoc->get_Script(&pScript);
if(FAILED(hr)){
throw("");
}
CComBSTR bstrMember("callback"); //html前端的javascript函数的名称
DISPID dispid;
hr=pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);
//设置函数参数
DISPPARAMS dispparams;
memset(&dispparams,0,sizeof(dispparams));
UINT argsNum = 3;//有三个参数
dispparams.cArgs = argsNum;//callback函数的参数个数,注意从这里传进javascript函数的参数是相反的。
dispparams.rgvarg = new VARIANT[dispparams.cArgs];//表示对参数数组的引用。
for(int i = 0; i < argsNum; i++)
{
//dispparams.rgvarg[i].iVal = m_param;
//传递字符串
CString strmac;
strmac="12345123451234512345";
BSTR bstr = strmac.AllocSysString();
dispparams.rgvarg[i].bstrVal = bstr;
dispparams.rgvarg[i].vt = VT_BSTR;
//传递short
//SHORT aa = 800;
//dispparams.rgvarg[i].iVal = aa;
//dispparams.rgvarg[i].vt = VT_I2;
}
dispparams.cNamedArgs =0;//表示命名参数的计数。
EXCEPINFO excepInfo;
memset(&excepInfo,0,sizeof(excepInfo));
CComVariant vaResult;
UINT nArgErr = (UINT)-1; // initialize to invalid arg
hr = pScript->Invoke(dispid, IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);
}
ActiveX调用JS
最新推荐文章于 2020-01-02 19:09:35 发布