动态链接库

一、创建动态链接库

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);

posted @ 2021-12-07 17:35  lnterpreter  阅读(72)  评论(0编辑  收藏  举报