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

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


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

每次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 dtttspa

相关文章
相关标签/搜索