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