以 MSScriptControl.ScriptControl.1 为例
CScriptControl是MSScriptControl.ScriptControl.1是MFC包装类,并做了一点改动。
CScriptControl* m_lpScriptControl;
1.定义类的接口映视。
DECLARE_INTERFACE_MAP()
BEGIN_INTERFACE_MAP(CMyDlg, CDialog)
INTERFACE_PART(CMyDlg, DIID_DScriptControlSource, Dispatch)
END_INTERFACE_MAP()
2. 关联事件到自定义函数。
每个事件的名称,DISPID,参数都是不一样的。
DECLARE_DISPATCH_MAP()
BEGIN_DISPATCH_MAP(CMyDlg, CDialog)
DISP_FUNCTION_ID(CMyDlg, "Error", 0xBB8, OnError, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()
3.在OnInitDialog()中创建ScriptControl实例并连接。
EnableAutomation();
m_lpScriptControl = new CScriptControl;
m_lpScriptControl->CreateByReg();
DWORD dwCookie = 0;
LPUNKNOWN pUnkSink = GetIDispatch(FALSE);
AfxConnectionAdvise(m_lpScriptControl->m_lpDispatch, DIID_DScriptControlSource, pUnkSink, FALSE, &dwCookie);
4.测试一下,调用m_lpScriptControl执行一段错误的脚本。
比如:m_lpScriptControl->ExecuteStatement("msgbox1 1")
看看OnError被执行了没有?
这种方法只对继承IDispatch的事件源有效,对继承IUnknow的事件源无效,和VBS一样!
posted on 2010-12-11 15:10
张志松 阅读(1234)
评论(0) 编辑 收藏 引用