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

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

 2006-07-21 11:45:57 来源:WEB开发网   
核心提示:第一部分:Band 对象介绍第二部分:BandObj的类层次和MyBands服务程序的注册第三部分:深入Band内部,揭开Band的面纱第四部分:Band对象使用中遇到的一些问题第五部分:建立自己的COM编程平台ComToys第六部分:设计和构造COMToys第七部分:类的实现第八部分 类厂和注册以及美中不足类厂和注册

第一部分:Band 对象介绍

第二部分:BandObj的类层次和MyBands服务程序的注册

第三部分:深入Band内部,揭开Band的面纱

第四部分:Band对象使用中遇到的一些问题

第五部分:建立自己的COM编程平台ComToys

第六部分:设计和构造COMToys

第七部分:类的实现

第八部分 类厂和注册以及美中不足

类厂和注册

到现在为止,我们的讨论没有涉及到一个重要的细节,那就是对象的创建。因为相对与设计和实现来说,它比较简单。前四个部分所讨论的类工厂和注册相当广义。其中描述了BandObj如何利用资源脚本文件中所列的DLL的条目以及使用ATL注册器的类厂来注册COM对象。到了COMToys,我仅仅是将代码从BandObj移到了COMToys。 COMToys使用CTModule,CTFactory,和一个特殊的文件DllEntry.cpp来处理对象的创建,注册和DLL条目。CTModule是一个典型的“模块类”,就像MFC的CWinApp或者ATL的CComModule。其中的OnGetClassObject,OnDllRegisterServer等虚函数是可以重载的。不过必须包含(#include)实现DLL入口的DllEntry.cpp。

extern "C"
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid,
             LPVOID* ppv)
{
  MFCENTRY;
  return CTModule::GetModule()->
   OnGetClassObject(rclsid, riid, ppv);
}   

如法炮制DllRegisterServer,DllCanUnloadNow及其它函数。CTModule::GetModule类似AfxGetApp。它返回一个且是仅有的一个全程CTModule对象。所以DllEntry.cpp的全部工作是将外部实现的硬性函数转换成较容易重载的虚函数。 至于MFC应用方面,COMToys 有一个用于COM的MFC 应用类 CTMfcModule,它从CTModule 和 COleControlModule 实现多继承。在这个CTMfcModule类中实现了OnGetClassObject和其它操作,这些操作中又调用相应的MFC函数来完成工作。将这些东西分离的理由是尽量将处理放到不依赖MFC的代码中。图十八显示了MFC和非MFC类之间的关系: 

1 2 3  下一页

Tags:编写 复用 更好

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