[VS2017(10)] 创建MFC DLL项目[TZZ]
1、启动Visual Studio 2017软件,通过菜单栏中的“文件 > 新建 > 项楫默礤鲼目”打开“新建项目窗口”。在该轻拔吴悃窗口中,选择“Windows桌面 > MFC DLL”,然后设置项目名称和存储位置并单击“确定按钮”确定项目创建;
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/5a5a00def4dca039484ae05f58d96975f3c40de8.jpg)
2、在弹出的“MFC DLL”窗口中,选择DLL类型为“使用共享MFC DLL的规则DLL”,然后点击“确定按钮”确定项目创建;
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/6834ecc4ec9959436654664d95425d6b05d104e8.jpg)
3、打开新建MFC DLL项目中的“MFCLibrary1.h”头文件,你会发现VS自动从CWinApp派生了一个CMFCLibrary1App类;
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/1f03436b04d14929f2dd17a063e5eceeacbc7ee8.jpg)
4、打开“MFCLibrary1.cpp”文件,该文件中给出了一段使用MFC DLL的注意事项,继续向下看代码,你会发现它定义了一个theApp全局变量。这一点与基于窗口的MFC项目是一致的,也就意味着在MFC DLL中可以自由使用MFC类库;
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/edafb3bcbe2f4770294df1696f3b3b86032179e8.jpg)
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/e57a258602214f57e6037d08732064fb970b73e8.jpg)
5、点击VS2017菜单栏中的“生成 > 生成解决方案”编译项目。查看“输出面板”中给出的输出信息,可知项目编译成功;
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/92174dbbf82064fbef5e1f928e6104a354e96fe8.jpg)
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/05e24be983aee8d7d97fcd5c6b781431deb666e8.jpg)
6、切换到项目的资源列表,然后新建一个Dialog资源。在打开的新对话框资源中,通过类向导添加一个“CLoginDlg类(为了演示随便取的名字)”(如果你的VS2017出现无法添加的错误,请参考引用文章修复);
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/def72c6c576699cf8a0601d0a885e036e3915ee8.jpg)
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/e177fc9147e833e0b62713b030ea3e86314859e8.jpg)
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/38332303bbea3e86a31d4ff05cd4483105eb55e8.jpg)
7、打开“LoginDlg.h”文件,在CLoginDlg类声明代码的下方使用“extern关键字”声明两个函数,分别用于创建/销毁CLoginDlg实例;
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/d695563104ebf6a7c65aac98ffee1c324a184fe8.jpg)
8、打开“LoginDlg.cpp”文件,添加makeLoginDlg函数和removeLoginDlg函数的实现代码(很简单,只是new和delete);
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/836a6aee1c324b18cf79a24253a72633498448e8.jpg)
9、打开“MFCLibrary1.def”文件(该文件用于指定DLL中需要导出的函数和变量),在EXPORTS下方写上需要导出的makeLoginDlg函数和removeLoginDlg函数的名称;
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/49c5d3e34b2c56eedd2aa8bdf775e5f4fdf540e8.jpg)
10、保存所有文件修改,然后再次生成解决方案。通过“输出面板”中的信息,可以确认项目代码编写正确;
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/fdb4f00d3aceaad7dc3e2251eee7340f6578b8e8.jpg)
11、打开MFCLibrary1项目的输出目录,然后通过Depends软件打开生成的MFCLibrary1.dll文件。在Depends中可以见到该DLL中成功导出了makeLoginDlg函数和removeLoginDlg函数;
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/bff8683e21c2bbd65985435b116186254093aee8.jpg)
![[VS2017(10)] 创建MFC DLL项目[TZZ]](https://exp-picture.cdn.bcebos.com/cfa9ae04541bd10f33732329ba0e1799e82aa7e8.jpg)
12、如果项目中需要将MFC窗口藏在DLL中,那么通过新建MFC DLL项目就是最好的选择。它自动将MFC运行所需要的一整套机制拎枋辏话都为你封装好了,直接使用即可。至于Depends软件,那是微软提供的用于查看PE文件依赖和导出标记的有力工具,调试中是必不可少的。尤其是遇到软件启动报找不到DLL时,就得靠它分析文件依赖了;