张志松
记录工作点滴,留下人生轨迹。(zezese@163.com)
posts - 68,  comments - 11,  trackbacks - 0

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

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2010年12月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

转载

搜索

  •  

最新评论

阅读排行榜

评论排行榜