设为首页 加入收藏

TOP

22.4.1 MFC扩展DLL的创建
2013-10-07 13:12:08 来源: 作者: 【 】 浏览:61
Tags:22.4.1 MFC 扩展 DLL 创建

22.4  MFC扩展DLL的创建与使用实例

MFC常规DLL是使用MFC但是导出的接口不支持MFC的DLL,而MFC扩展DLL则是内部既使用MFC,导出的接口也支持MFC的DLL,解决了要在DLL和EXE之间传递从MFC派生而来的类的问题。本节介绍MFC扩展DLL的创建和使用实例。

22.4.1  MFC扩展DLL的创建

MFC扩展DLL实现继承子MFC类库中的已经存在的类,完成可重复使用的类的DLL。扩展DLL使用MFC的动态链接版本,也就是MFC共享版本。只有使用MFC共享版本生成的MFC可执行文件(应用程序或规则DLL),可以使用扩展DLL。使用扩展DLL可以从MFC中继承新的自定义类,并为应用程序提供扩展的MFC版本。

DLL的客户端EXE必须是使用_AFXDLL编译的MFC应用程序。

动态链接到MFC的规则DLL也可以使用扩展DLL。

扩展DLL也可以使用_AFXEXT定义进行编译,强制定义_AFXDLL,并保证正确的特性。使得当生成DLL时,AFX_EXT_CLASS定义为__declspec(dllexport),如果在扩展DLL中使用宏声明类则是必需的。

扩展DLL不会实例化从CwinApp继承的类,但是依赖于客户端应用程序或DLL提供对象。

扩展DLL也提供一个DllMain()函数,并进行必需的初始化工作。

扩展DLL使用MFC的动态链接版本生成(也就是共享MFC版本)。只有使用共享版本MFC的MFC可执行程序(应用程序或规则DLL)才可以使用扩展DLL。无论是客户端应用程序还是扩展DLL,必须使用相同的MFC.DLL版本。

扩展DLL可以在应用程序和DLL之间传递派生自MFC的对象。在对象创建的模块中与传入对象相关的成员函数也会传入。因为当使用共享MFC的DLL版本时,这些函数被正确地导出,可以在应用程序和导入的扩展DLL之间自由地传递MFC或派生的MFC对象指针。

MFC扩展DLL使用共享版本的MFC与应用程序使用共享版本的DLL的方法是相同的,但是也有不同之处。

没有继承子CwinApp的派生类。必须与客户端应用程序的CwinApp派生对象一起工作。也就是说,客户端应用程序处理主消息队列、空闲队列等。

在DllMain()函数中调用AfxInitExtensionModule()函数,并检测此函数的返回值。如果此函数返回0,则从DllMain()函数中返回0。

如果扩展DLL想导出应用程序的CruntimeClass对象或资源,则会在初始化时,创建CdynLinkLibrary对象。

如果使用DEF文件导出,在头文件的开头和结尾处放置以下代码。

  1. #undef AFX_DATA  
  2. #define AFX_DATA AFX_EXT_DATA  
  3. // 头文件体  
  4. #undef AFX_DATA  
  5. #define AFX_DATA 

这4行可以保证扩展DLL中的代码正确编译。如果没有这4行,会导致DLL编译或链接不正确。创建MFC扩展DLL的方法与创建MFC常规DLL的步骤基本是相同的,只是在创建MFC DLL的第一步中,选择DLL的类型为MFC Extension DLL(using)shared MFC DLL选项,则创建的DLL就是MFC扩展DLL。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇22.4.2 MFC扩展DLL的创建实例 下一篇22.5.1 使用Depends工具查看DLL接..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: