用ATL建立轻量级的COM对象(8)
2006-07-21 11:44:24 来源:WEB开发网核心提示: class CPager: public CComObjectRoot, public CComCoClass, public IPager, public IConnectionPointContainerImpl, public CProxyIPageSink, public CPro
class CPager
: public CComObjectRoot,
public CComCoClass,
public IPager,
public IConnectionPointContainerImpl,
public CProxyIPageSink,
public CProxyIStopSink
{
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()
};
为了发送出境方法通知,你只要调用适当的Fire_XXX方法即可:
STDMETHODIMP CPager::SendMessage(LPCOLESTR pwsz) {
// send outbound notifications
HRESULT hr = Fire_OnPageRecieved();
// process normally
return hr;
}
机器产生代理的一个限制是必须要 outbound 接口的类型库定义。对于大量的 COM 接口而言,这是不可能的,因为类型库在转换方面与 IDL 特性背道而驰。对于更复杂的接口,你可以从机器所产生的代理开始并修改这些代码来进行尝试。
后记
本文概括地讨论了 ATL 核心体系结构,主要针对 ATL 中使用,同时也是 ATL 用户使用的基本编程风格。实际上本文中所讨论的和涉及的内容特性都是基于 ATL1.1 版本的,某些内容在 ATL2.0 中稍有改动。本文没有包含有关ActiveX 控件接口的缺省实现方面的内容,它们被加到了 ATL2.0 版本中,遵循与 ATL1.1 同样的编程哲学。只要你常常推敲 ATL 源代码,这些接口会很容易理解。
在与同事和朋友讨论 ATL 时,我发现大多数人的感触是针对 ATL 的设计。有一小部分人觉得它非常棒。另外一小部分人觉得它复杂而不可思议。但大多数人(包括我自己)的感觉是双重的,优劣兼而有之。幸运的是 ATL 编程是一个非常"量入为出"的过程。只要你去学总会有收获,所以初学者需要努力而为之。(全文完)
- ››建立唯美图片特效,十个jQuery插件分享
- ››建立自己的TextView和ImageView的组合View类
- ››轻量级数据交换格式 JSON轻松入门
- ››建立虚拟专用网 使用SSH保护网络通信
- ››轻量级系统 Lubuntu 10.04 发布
- ››建立一个 Derby 日历,第 3 部分: 使用事务和锁定...
- ››建立一个 Derby 日历,第 3 部分: 使用事务和锁定...
- ››建立一个 Derby 日历,第 1 部分: 理解 JDBC
- ››建立一个 Derby 日历,第 2 部分: 嵌入选项(上)...
- ››建立一个 Derby 日历,第 2 部分: 嵌入选项(下)...
- ››建立 qt for symbian 的开发环境
- ››建立一个 Android 项目的实例
更多精彩
赞助商链接