VS2017_MFC的WebBrowser控件与网页JavaScript交互的关键点记录

https://www.cnblogs.com/MrYuan/p/5019220.html 这文章中讲到: 使用IDispatch接口的GetIDsOfNames方法根据JS函数名获取调度标识符DISPID,使用Invoke来调用JS函数。


首先,C++把一个对象传给JavaScript 这种浏览器, 没法在JavaScript里通过枚举取得函数名. 函数名是没有事先定义的. javaScript,可以调用任何名称的函数, 算是一种请求, 写法是obj["ArcadiaTest"](2828); 或obj.ArcadiaTest(2828);

每次JavaScript调用函数, 请会通过 CMFCApplicationWebDlg::GetIDsOfNames取得函数Id, 再请求CMFCApplicationWebDlg::Invoke用所取的Id调用C++功能


CMFCApplicationWebDlg我写的这个类, 有继承IDispatch 需要另外实现几个虚函数:

	// 继承抽象函数:
	virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
	virtual ULONG   STDMETHODCALLTYPE AddRef();
	virtual ULONG	STDMETHODCALLTYPE Release();
	virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo);
	virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT* pctinfo);

实例工程备份: https://pan.baidu.com/s/1UuzZcdGCH9TacMbOfOvg-A dttt

转载于:https://my.oschina.net/u/235558/blog/3044325

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值