动态链接库

什么是动态链接库

动态链接库(DLL) 是一个包含函数和数据的模块,它可以被其他模块(应用或 DLL)使用

创建动态链接库

直接用vs2019的动态链接库进行项目创建,把编译器创建的头文件和源文件删掉,自己新建一个.cpp和.h文件
在这里插入图片描述
与静态链接库不同的是,动态链接库不仅有.lib文件,还有.dll文件。在静态链接库中,代码放在.lib文件中;而动态链接库把真正的代码放在.dll文件中,.lib文件用来存储代码的函数地址

同样,设置为不使用预编译头
在这里插入图片描述
生成代码
在这里插入图片描述
把.dll文件和.lib文件以及.h拷贝给新创建的空项目MyDll1_Call
在这里插入图片描述

隐式调用

将 #pragma comment(lib,“DLL名.lib”) 添加到调用项目的源程序中;运行程序
在这里插入图片描述

#include <stdio.h>
#include "MyDll.h"	//将.h文件复制到目录下则可用该条语句,include了则不需要再声明dll中的函数

#pragma comment(lib,"Dll1.lib")	//若是在资源文件中在添加现有项把.lib和.dll加进去则不用该行代码

int main(int argc, char* argv[])
{
	int x = Plus(1,2);
	printf("%d\n",x);
	return 0;
}

显式调用

在这里插入图片描述

#include <stdio.h>
#include <Windows.h>

//步骤1	定义函数指针
typedef int(_stdcall* lpPlus)(int, int);
typedef int(_stdcall* lpSub)(int, int);
typedef int(_stdcall* lpMul)(int, int);
typedef int(_stdcall* lpDiv)(int, int);

int main(int argc, char* argv[])
{
	//步骤2 声明函数指针变量
	lpPlus myPlus;
	lpSub mySub;
	lpMul myMul;
	lpDiv myDiv;

	//步骤3	动态加载dll到内存中
	HINSTANCE hModule = LoadLibraryA("Dll1.dll");

	//步骤4 获取函数地址
	myPlus = (lpPlus)GetProcAddress(hModule, "_Plus@8");	//若没加_stdcall,名字应改成Plus
	mySub = (lpSub)GetProcAddress(hModule, "_Sub@8");
	myMul = (lpMul)GetProcAddress(hModule, "_Mul@8");
	myDiv = (lpDiv)GetProcAddress(hModule, "_Div@8");

	int x1 = myPlus(5, 1);
	int x2 = mySub(5, 1);
	int x3 = myMul(5, 1);
	int x4 = myDiv(5, 1);
	printf("%d\n", x1);
	printf("%d\n", x2);
	printf("%d\n", x3);
	printf("%d\n", x4);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值