以 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 
张志松 阅读(1264) 
评论(0)  编辑 收藏 引用