动态链接库
一、创建动态链接库
File -> new -> Win32 Dynamic-Link Library -> A simple DLL project -> New Class
二、写函数
int Plus(int x,int y)
{
return x+y;
}
int Sub(int x,int y)
{
return x-y;
}
三、写头文件
extern “C” _declspec(dllexport) 调用约定(可以不写) 返回类型 函数名(参数列表);
1、extern 表示这是个全局函数,可以供各个其他的函数调用
2、"C" 按照C语言的方式进行编译、链接
3、__declspec(dllexport)告诉编译器此函数为导出函数;
extern "C" _declspec(dllexport) int Plus(int x,int y);
extern "C" _declspec(dllexport) int Sub(int x,int y);
四、编号导出
1、头文件
int Plus(int x,int y);
int Sub(int x,int y);
2、生成一个.def文件
File -> Text File
Plus @12 既有编号12,也有名字
Sub @13 NONAME 只有编号13,没有名字
EXPORTS
Plus @12
Sub @13 NONAME
五、导入dll
1、将生成的dll放在工程目录下
2、定义函数指针
typedef int (调用约定(可以省略) 类型)(int,int);
typedef int (*lpPlus)(int,int);
typedef int (*lpSub)(int,int);
3、定义变量
lpPlus myPlus;
lpSub mySub;
4、动态加载dll到内存中
#include <Windows.h>
HINSTANCE hModule = LoadLibrary("test1.dll");
5、获取函数地址
- Plus 是导出的函数名
- (char*)0xD 是导出的序号
myPlus = (lpPlus)GetProcAddress(hModule, "Plus");
mySub = (lpSub)GetProcAddress(hModule, (char*)0xD);
6、调用函数
int x = myPlus(1,2);
int y = mySub(5,3);
7、释放dll
FreeLibrary(hModule);