请问如何使用IDispatchImpl实现基于IDispatch连接点Sink

ATField 2004-07-13 10:56:18
通过IDispEventImpl可以实现基于IDispatch连接点Sink。
不过我想使用IDispatchImpl来做方便一些。
但是使用中发现IDispatchImpl无法接受到阿,而IDispEventImpl就可以,不知道为何,请指教。
另外要说明的是,我要实现的ISomeSink接口是来自另外一个应用程序的,比如Word。
...全文
506 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ATField 2004-07-13
  • 打赏
  • 举报
回复
谢谢。
我想再请问一下,IDispatchImpl和IDispEventImpl具体的区别在哪里?如果要用IDispatchImpl实现Sink,我应该具体怎么做呢?
gracezhu 2004-07-13
  • 打赏
  • 举报
回复
ATL的模板类IDispatchImpl只支持双接口,不支持dispinterface,源对象的出接口(outgoing interface)往往是dispinterface,所以接收器对象要通过其他的途径来实现事件接口。ATL提供了两个模板类IDispEventImpl和IDispEventSimpleImpl用于接收器对象的实现,IDispEventImpl要借助于类型库所提供的出接口类型信息,这是最简单的实现方法,而IDispEventSimpleImpl不需要类型库的支持,这是效率最高的方法。这两种方法都需要用到事件接收器映射表(event sink map)
看ATL技术内幕
wangweixing2000 2004-07-13
  • 打赏
  • 举报
回复
通过IDispEventImpl可以实现基于IDispatch连接点Sink。
不过我想使用IDispatchImpl来做方便一些。
这样说是错误的,如果要用IDispatchImpl来做你必须手动把IDispEventImpl中的那几个方法重新包装一遍,除非你特别精通com要不然劝你放弃!
ATField 2004-07-13
  • 打赏
  • 举报
回复
我觉得比较奇怪的是,不管是Sink还是IDispatch,他们本质都应该是可以通过IDispatch接口来Invoke各个函数,有没有SinkMap应该区别不大阿。MSDN上说:IDispatchImpl可以用来实现Sink,只是每个函数都需要实现,而IDispEventImpl则不需实现每个函数。这是为什么?按照MSDN上的说法,应该IDispatchImpl是可以的才对阿?望指教一二。多谢。
gracezhu 2004-07-13
  • 打赏
  • 举报
回复
事件接收器是一个类,从IDispEventImpl继承。IDispEventImpl是ATL中的一个模板,专用于接收IDispatch接口的事件。IDispatchImpl不支持事件.你还是直接从IDispEventImpl派生把

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧