前面介绍了非规则MFC DLL,今天我们在总结一下第二类DLL--规则MFC DLL。
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 能够找到正确的资源模板。