社区
ATL
帖子详情
请问如何使用IDispatchImpl实现基于IDispatch连接点Sink
ATField
2004-07-13 10:56:18
通过IDispEventImpl可以实现基于IDispatch连接点Sink。
不过我想使用IDispatchImpl来做方便一些。
但是使用中发现IDispatchImpl无法接受到阿,而IDispEventImpl就可以,不知道为何,请指教。
另外要说明的是,我要实现的ISomeSink接口是来自另外一个应用程序的,比如Word。
...全文
575
5
打赏
收藏
请问如何使用IDispatchImpl实现基于IDispatch连接点Sink
通过IDispEventImpl可以实现基于IDispatch连接点Sink。 不过我想使用IDispatchImpl来做方便一些。 但是使用中发现IDispatchImpl无法接受到阿,而IDispEventImpl就可以,不知道为何,请指教。 另外要说明的是,我要实现的ISomeSink接口是来自另外一个应用程序的,比如Word。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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派生把
Visual C++ COM
连接点
实战:ATL
实现
事件通知与观察者模式
在组件对象模型(COM)架构中,
实现
组件与客户端之间的高效通信是核心挑战之一。其原理基于接口的二进制标准,通过定义明确的契约
实现
跨进程、跨语言的互操作性。
连接点
技术作为COM事件机制的关键
实现
,提供了重要的技术价值,它允许源对象主动向多个客户端广播事件,有效解决了传统轮询模式效率低下的问题,
实现
了经典的观察者模式。这一机制在桌面应用、中间件和自动化控制等场景中广泛应用,特别是在需要实时数据推送的场景下,如股票行情服务器、设备状态监控等。本文将以Visual C++和ATL框架为基础,深入解析
连接点
的
实现
路径
ATL:I
Dispatch
Impl
, IDispEvent
Impl
, IDispEventS
impl
e
Impl
的区别和联系
这几个类都和I
Dispatch
的
实现
有关系,但是他们提供的I
Dispatch
的
实现
是不同的。 I
Dispatch
Impl
只能用于双接口(Dual Interface)的
实现
。I
Dispatch
Impl
本身的I
Dispatch
接口
实现
是
使用
ITypeInfo::Invoke的。ITypeInfo简单来说是一个代表TypeLibrary中一个类型的COM对象,比如某个interface IA。而IT
VC++ ATL
连接点
编程实战:从COM事件模型到可运行示例
在组件化软件开发中,事件驱动架构是
实现
松耦合、高内聚的关键技术。其核心原理是观察者模式,允许对象在状态变化时主动通知其他依赖对象,而非被动轮询。这一机制在Windows平台的COM(Component Object Model)技术中,通过
连接点
(Connection Point)标准
实现
,解决了单向接口调用的局限性。ATL(Active Template Library)作为COM开发的强力助手,通过模板类封装了
连接点
的复杂
实现
细节,将开发者从繁琐的接口指针管理和引用计数中解放出来,显著提升了开发效率与代
(转)ATL:I
Dispatch
Impl
, IDispEvent
Impl
, IDispEventS
impl
e
Impl
的区别和联系
这几个类都和I
Dispatch
的
实现
有关系,但是他们提供的I
Dispatch
的
实现
是不同的。 I
Dispatch
Impl
只能用于双接口(Dual Interface)的
实现
。I
Dispatch
Impl
本身的I
Dispatch
接口
实现
是
使用
ITypeInfo::Invoke的。ITypeInfo简单来说是一个代表TypeLibrary中一个类型的COM对象,比如某个interface IA。而
ATL
3,248
社区成员
48,530
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章