码迷,mamicode.com
首页 > 编程语言 > 详细

四种DLL:NON-MFC DLL, Regular DLL Statically/Dynamically Linked to MFC, MFC Extension DLL

时间:2015-10-02 12:36:51      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

参考资料:

https://msdn.microsoft.com/en-us/library/30c674tx.aspx

 

在上面给出的MSDN链接中,你可以看到四种DLL的定义。这里就不赘述。捡重点的说

区别就在于:

  • NON-MFC DLL内部不能使用MFC(当然其导出的API也不能涉及MFC)。(这里我说“导出的API”是指导出的C函数、C++类或者共享的全局变量等等)
  • Regular DLL Statically/Dynamically linked to MFC内部可以使用MFC,但是其导出的API不能涉及MFC(比如说涉及到MFC的某个类或其子类,包括你写的MFC的子类,以及任何没有在该DLL中运行的MFC代码;说人话,就是任何涉及MFC的代码都只能在DLL内部运行,如果你从DLL中导出,再由其他的EXE或者DLL运行,是不行的。)当然,根据该DLL是动态链接到MFC库还是静态链接到MFC库又细分成了两种。
  • MFC Extension DLL内部可以使用MFC,并且其导出的API也可以涉及MFC。
  • 可以看到,从NON-MFC DLL到MFC Extension DLL,其可使用的功能越来越多。NON-MFC DLL可以导出C函数,全局变量,普通的C++类,但不能涉及MFC;Regular DLL具备NON-MFC DLL的所有能力,并且其内部可以使用MFC,但不能将涉及MFC的部分导出;MFC Extension DLL具备Regular DLL的所有能力,并且可以导出使用MFC的API。

 

1、如何在VS中创建四种DLL的项目

1.1、NON-MFC DLL

新建项目>VC++>Win32>Win32项目>选择DLL

1.2、Regular DLL Statically/Dynamically linked to MFC

新建项目>VC++>MFC>MFC DLL>选择Statically linked to MFC / Dynamically linked to MFC

1.3、MFC Extension DLL

新建项目>VC++>MFC>MFC DLL>选择MFC Extension DLL

 

DLLDEMO项目:

 

举例说明了NON-MFC DLL(AddXxx.dll):导出了C函数,全局变量,非MFC的C++类。

举例说明了Regular DLL Dynamically linked to MFC(Add.dll):导出了C函数,其内部使用MFC创建了一个对话框。

举例说明了MFC Extension DLL(AddExt.dll):导出了C函数,MFC子类,该子类是一个对话框。

测试程序:FontView,点击Print Sample按钮可以测试三种DLL,相关代码在CMainWindow::OnPushButtonClicked中可以看到

下载地址:下载DLLDEMO(待更新)

 

备注:

在编写AddExt.dll的代码的时候,由于没仔细看MSDN中的说明,在InfoDlgFactoryExt中使用了AFX_MANAGE_STATE从而导致了LNK2005错误(error LNK2005: _DllMain@12 already defined in dllmain.obj)。实际上MFC Extension DLL用不着这个,AFX_MANAGE_STATE是拿给使用了MFC的Regular DLL的。

 

四种DLL:NON-MFC DLL, Regular DLL Statically/Dynamically Linked to MFC, MFC Extension DLL

标签:

原文地址:http://www.cnblogs.com/qrlozte/p/4852093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!