用ATL建立轻量级的COM对象(8)
2006-07-21 11:44:24 来源:WEB开发网核心提示:第一部分:为什么要使用ATL,第二部分:起步篇,用ATL建立轻量级的COM对象(8),第三部分:实现IUnknown,第四部分:实现接口,为了实现这种诀窍,ATL 类 IConnectionPointImpl 不从接口 IConnectionPoint 派生,第五部分:不要过分抽象,第六部分:输出你的类
第一部分:为什么要使用ATL。
第二部分:起步篇。
第三部分:实现IUnknown。
第四部分:实现接口。
第五部分:不要过分抽象。
第六部分:输出你的类。
第七部分:ATL和注册表。
连接
COM 编程最单调乏味的一个方面是使用连接点来支持 outbound 接口。IConnectionPoint/IConnectionPointContainer 的设计好像是专门用来解决这个问题的,但是经验证明,不论是在性能方面,还是在易用性方面,它还是存在不足之处。ATL为每一个这样的接口提供了缺省的实现类,多少解决了一些易用性问题。
要理解ATL如何实现连结点,最容易的方式是看例子:假设定义了如下的 outbound 接口:
interface IPageSink : IUnknown {
HRESULT OnPageReceived(void);
}
interface IStopSink : IUnknown {
HRESULT OnShutdown(void);
}
为了支持这两个 outbound 接口,下面的ATL代码已经足够:
class CPager
: public CComObjectRoot,
public CComCoClass,
public IPager,
public IConnectionPointContainerImpl,
public IConnectionPointImpl,
public IConnectionPointImpl
{
BEGIN_COM_MAP(CPager)
COM_INTERFACE_ENTRY(IPager)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CPager)
CONNECTION_POINT_ENTRY(IID_IPageSink)
CONNECTION_POINT_ENTRY(IID_IStopSink)
END_CONNECTION_POINT_MAP()
};
大多数有经验的 COM 程序员首先注意到的是 CPager 类从一个接口(IConnectionPoint)派生的,这个接口并不作为 COM 本身的一部分提供。为了实现这种诀窍,ATL 类 IConnectionPointImpl 不从接口 IConnectionPoint 派生,而是象 IConnectionPoint 那样以相同的顺序定义它的虚函数。
- ››建立唯美图片特效,十个jQuery插件分享
- ››建立自己的TextView和ImageView的组合View类
- ››轻量级数据交换格式 JSON轻松入门
- ››建立虚拟专用网 使用SSH保护网络通信
- ››轻量级系统 Lubuntu 10.04 发布
- ››建立一个 Derby 日历,第 3 部分: 使用事务和锁定...
- ››建立一个 Derby 日历,第 3 部分: 使用事务和锁定...
- ››建立一个 Derby 日历,第 1 部分: 理解 JDBC
- ››建立一个 Derby 日历,第 2 部分: 嵌入选项(上)...
- ››建立一个 Derby 日历,第 2 部分: 嵌入选项(下)...
- ››建立 qt for symbian 的开发环境
- ››建立一个 Android 项目的实例
赞助商链接