大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
1 打开VS2015,新建MFC dll动态库,如下图所示:
2 点击下一步,在应用程序设置里选择带静态链接的MFC规则,这个主要为了以静态库的形式生成MFC dll,便于动态库可以移植到其它编程语言或者其它计算机系统里调用。
3 将编译模式改为Release模式
4 以上步骤就将MFC dll动态库的编译环境配置好了。接下来开始编译动态库导出的函数。
在MFC_dll.cpp中写入函数的实现,如下图:
代码如下:
//编写mfc dll函数的实现
int _stdcall add_func(int a, int b)
{
//AFX_MANAGE_STATE这句代码是用于模块切换时的状态保护,最好加上这一句
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//定义函数体
//输出一个MFC消息框
AfxMessageBox(L"hello,i am mfc dll");
//实现加法运算
return a + b;
}
5 接下来就是定义函数的导出接口了,也就是在头文件中声明add_func这个函数,这里导出函数的声明可以放在工程自动生成的MFC_dll.h的这个文件中,但我推荐你最好不要放在这个文件里,具体什么原因熟悉动态库的编写可以自行体会原因。右键头文件,新建一个mfcAPI.h的头文件作为函数导出接口。如下图:
6 接下来在MFC_dll.cpp中引入新建的mfcAPI.h这个头文件
7 在新建的头文件mfcAPI.h声明导出函数,如下图:
代码如下:
#pragma once
//定义导出函数接口声明
_declspec(dllexport) int _stdcall add_func(int a, int b);
网上有很多博客写的导出函数都在前面加了extern “C”,在我看来这是没必要的,因为是生成C++格式标准的函数,而不是C格式的函数。当然,如果你导出的函数需要支持C语言,就加上extern “C”。
8 在MFC_dll.def 中定义函数的显示导出:
代码如下:
add_func @1
9 然后编译工程,即可成功生成mfc dll的动态库
10 生成了动态库,那么如何把这个动态库提供给别人用。我们知道C++静态库只有.h文件和.lib文件,C++动态库有有.h文件和.lib文件还有.dll文件,因此我们在我们的工程中找到这三个文件,复制出来就是一个完整的mfc dll动态库了。
在工程的源程序所在目录文件夹中找到我们在程序中新建的头文件mfcAPI.h,复制出来
在Release目录下找到生成的动态库文件MFC_dll.dll文件和MFC_dll.lib文件,复制出来
以上三个文件就是一个完整的mfc dll动态库了。
11 动态库制作好了,那么我们就可以在任何语言中调用这个动态库了。我就以在C++的控制台去调用这个动态库。因为我们的mfc dll动态库是在Release模式下生成的,因此控制台也必须为Release模式。
12 接下里配置mfc dll这个库的导入。导入一个C++动态库相信大家都清楚了吧,就跟C++导入任何一个动态库的方法一样,在VC++目录配置包含目录以及库目录,在链接器输入里配置动态库里的MFC_dll.lib文件。然后这个MFC_dll.dll的文件放在win32控制台程序的Release目录下。
控制台main函数中代码如下:
#include<iostream>
//引入mfc dll动态库的头文件
#include"mfcAPI.h"
using namespace std;
int main()
{
//调用mfc dll中自己编写的add函数
cout << add_func(2, 6) << endl;
system("pause");
return 0;
}
运行效果如下图:
资源下载地址:
https://download.csdn.net/download/qq_37781464/10863335
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187466.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...