VC++动态链接库(DLL)编程深入浅出(三)

太平洋电脑网 2005年09月23日 09:57

      AI智慧存储软件加持,佰维移动固态硬盘PD2000 1TB使用体验去看看

      在本页浏览全文

      联系作者:e-mail:21cnbao@21cn.com

      相关链接:VC++动态链接库(DLL)编程深入浅出(二)    (一)

      第4节我们对非MFC DLL进行了介绍,这一节将详细地讲述MFC规则DLL的创建与使用技巧。
      另外,自从本文开始连载后,收到了一些读者的e-mail。有的读者提出了一些问题,笔者将在本文的最后一次连载中选取其中的典型问题进行解答。由于时间的关系,对于读者朋友的来信,笔者暂时不能一一回复,还望海涵!由于笔者的水平有限,文中难免有错误和纰漏,也热诚欢迎读者朋友不吝指正!
5. MFC规则DLL
5.1 概述
      MFC规则DLL的概念体现在两方面:
      (1) 它是MFC的
      “是MFC的”意味着可以在这种DLL的内部使用MFC;
      (2) 它是规则的
      “是规则的”意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以使用MFC,但是其与应用程序的接口不能是MFC。而MFC扩展DLL与应用程序的接口可以是MFC,可以从MFC扩展DLL中导出一个MFC类的派生类。
      Regular DLL能够被所有支持DLL技术的语言所编写的应用程序调用,当然也包括使用MFC的应用程序。在这种动态连接库中,包含一个从CWinApp继承下来的类,DllMain函数则由MFC自动提供。
      Regular DLL分为两类:
      (1)静态链接到MFC 的规则DLL
      静态链接到MFC的规则DLL与MFC库(包括MFC扩展 DLL)静态链接,将MFC库的代码直接生成在.dll文件中。在调用这种DLL的接口时,MFC使用DLL的资源。因此,在静态链接到MFC 的规则DLL中不需要进行模块状态的切换。
      使用这种方法生成的规则DLL其程序较大,也可能包含重复的代码。
      (2)动态链接到MFC 的规则DLL
      动态链接到MFC 的规则DLL 可以和使用它的可执行文件同时动态链接到 MFC DLL 和任何MFC扩展 DLL。在使用了MFC共享库的时候,默认情况下,MFC使用主应用程序的资源句柄来加载资源模板。这样,当DLL和应用程序中存在相同ID的资源时(即所谓的资源重复问题),系统可能不能获得正确的资源。因此,对于共享MFC DLL的规则DLL,我们必须进行模块切换以使得MFC能够找到正确的资源模板。

1/11