Windows平台静态链接库以及动态链接库的使用

一、静态链接库

  1. 配置项目属性

(默认的配置类型:应用程序.exe)

在这里插入图片描述

  1. 编写代码,Debug模式下编译项目—生成静态链接库
    静态生成的.lib既包含相关的符号链接,也包含实际代码
    在这里插入图片描述
  2. 新建项目,在新项目中导入静态链接库
    在这里插入图片描述
    方法一:使用 extern在外部定义,使用#pragma comment(lib,“XXX.lib”)//将库链接
#include <iostream>
extern int add(int a, int b);//外部定义add()

#pragma comment(lib,"Project2.lib")//将库链接
int main()
{
	std::cout<<add(1, 2);
	return 0;
}

方法二:使用 extern在外部定义,配置项目属性-链接器-输入-XXX.lib
在这里插入图片描述

#include <iostream>
extern int add(int a, int b);//外部定义add()

//#pragma comment(lib,"Project2.lib")//将库链接
int main()
{
	std::cout<<add(1, 2);
	return 0;
}

在这里插入图片描述

二、动态链接库的使用

  1. 配置项目属性
    在这里插入图片描述
  2. 生成动态链接库
extern "C" _declspec(dllexport) int add(int a, int b)//(dllexport)导出;"c"以C文件形式
{
	return a + b;
}

在这里插入图片描述
3. 使用动态链接库
方法一:同时使用静态链接库和动态库,使用XXX.lib(动态生成的.lib只包含相关的符号链接,实际代码没有)
在这里插入图片描述

#include <iostream>

extern "C" _declspec(dllimport) int add(int a, int b);
#pragma comment(lib,"DynamicDll.lib")

int main()
{
	return add(2, 4);
}

在这里插入图片描述
还需要将生成的dll文件拷贝到项目的debug目录下
在这里插入图片描述

方法二:不依赖静态库,直接使用动态库方法—利用Windows API
在这里插入图片描述

#include <iostream>
//1.将动态库加载到内存中
#include <Windows.h>

int main()
{
	//2.dll当前的实例
	HINSTANCE hDll = LoadLibrary("DynamicDll.dll");//参数:和项目debug同级:文件名;或者文件所在路径
	
	if (hDll == NULL)
	{
		std::cout << "load dll fail";
		return -1;
	}

	//3.创建函数指针
	using functionPtr = int(*)(int, int);

	//4.从加载的实例中找到add()
	functionPtr addFunction = (functionPtr)GetProcAddress(hDll, "add");
	if (addFunction == NULL)
	{
		std::cout << "cannot find target function";
		return -1;
	}

	std::cout << addFunction(2, 4);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值