1. 原理
VC++函数 <--- COM接口(IDispatch) <--- 控制器(ControlSite) <--- JavaScript
2. 引入WebBrowser控件
3. 引入CMyOccManager、CMyOleControlSite、CMyIDispImp类
1) 导入MyOleControlSite.cpp、MyOleControlSite.h、MyIDispImp.cpp、MyIDispImp.h文件
4. 在XXXXApp中添加接口变量
1) 在你的App头文件中,添加一个成员变量:
public:
class CMyIDispImp *m_pDispOM;
2) 在你的App源文件中,增加宏包含
#include "afxpriv.h"
#include <../src/occimpl.h>
#include "MyOleControlSite.h"
#include "MyIDispImp.h"
3) 修改InitInstance()函数——要放最前面
m_pDispOM = new CMyIDispImp;
AfxEnableControlContainer(new CMyOccManager);
// AfxEnableControlContainer();
5. 修改GetExternal()函数确定JavaScript调用VC++的路线
1) 在MyOleControlSite.cpp中,添加头文件引用:
#include "HtmlCall.h" // 这个是App头文件
2) 修改GetExternal()函数
{
// return the IDispatch we have for extending the object Model
IDispatch* pDisp = (IDispatch*)((CHtmlCallApp *)AfxGetApp())->m_pDispOM;
pDisp->AddRef();
*ppDispatch = pDisp;
return S_OK;
}
6. 增加所需函数
1) 在CXXXXDlg中,声明和实现函数:
2) CMyIDispImp::GetIDsOfNames()函数中添加一个函数名
3) CMyIDispImp::Invoke()函数中添加一个函数调用