WEB开发网
开发学院软件开发VC 编写可复用性更好的C++代码:Band对象和COMToys(5)... 阅读

编写可复用性更好的C++代码:Band对象和COMToys(5)

 2006-07-21 11:46:08 来源:WEB开发网   
核心提示: 那么到底使用什么呢?最终,我采各家所长建立了自己的系统,编写可复用性更好的C++代码:Band对象和COMToys(5)(4),同时使用MFC和ATL,这样就成全了我的工作,MyComClass::XPersistFile实现IPersistFile的方法,包括从IUnknown继承的方法

那么到底使用什么呢?最终,我采各家所长建立了自己的系统,同时使用MFC和ATL。这样就成全了我的工作,并充分利用了MFC和ATL各自的优点,MFC和ATL之间达到了取长补短的效果。COMToys利用MFC的类工厂和IUnknown,但绕开了嵌套类。同时还利用了ATL的智能指针,注册器和多继承,而过滤出了厚重的模板及易造成混淆的对象模型。这种混合方法不仅实用,而且还很发烧(加上是自己写代码,从而总是能更好地理解代码)。

我并不是说COMToys怎么怎么好,只是提供一种思路和想法,希望能抛砖引玉。主要目的是展示完全不必专门使用MFC和ATL,或其它系统就可以编写自己的COM对象创建平台。告诉你如何通过建立一个基本结构框架,然后用C++轻松进行COM编程——甚至比Visual Basic还容易!

粗糙的嵌套类

这是专家的评价,让我们看看代码。为了解释COMToys的工作原理,我要做的第一件事情是说明COMToys被设计用来解决的问题之一:避开MFC使用的嵌套类。为此让我们先简单回顾一下MFC/COM编程的基本概念。

为了用MFC写一个COM,要从CCmdTarget派生自己的类并使用宏实现自己的接口。例如,如果你的类实现IPersistFile,那下面是必须要写的代码:

// 在头文件中
class MyComClass : public CCmdTarget {
  BEGIN_INTERFACE_PART(PersistFile, IPersistFile)
  STDMETHODIMP GetClassID(LPCLSID pClsID);
  STDMETHODIMP IsDirty(void);
  ……
  END_INTERFACE_PART(PersistFile)
};  

这些宏在主类中声明一个嵌套类:MyComClass::XPersistFile,并声明一个实例:m_xPersistFile。MyComClass::XPersistFile实现IPersistFile的方法,包括从IUnknown继承的方法。为了让MFC知道这个接口,必须创建一个接口映射:

上一页  1 2 3 4 5  下一页

Tags:编写 复用 更好

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