WEB开发网
开发学院软件开发VC 用ATL建立轻量级的COM对象(8) 阅读

用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 编程是一个非常"量入为出"的过程。只要你去学总会有收获,所以初学者需要努力而为之。(全文完)

上一页  1 2 3 

Tags:ATL 建立 轻量级

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接