windows动态库和静态库

梳理下项目中常用的动态库、静态库使用方式。

静态库

静态库工程生成一个静态库lib文件。

参考文献6制作lib后,有三种方式去使用:

  1. 使用comment 显式调用,这样不用在visual studio 链接器->输入->附件依赖库里面配置依赖库,由于没有指定依赖库路径所有需要显示填写路径。
  2. 使用comment 显式调用,同时需要在链接器->常规->附加库目录中配置依赖库路径。由于使用了comment所以不用在visual studio 链接器->输入->附件依赖库里面配置。
  3. 隐式调用,需要在链接器->常规->附加库目录中配置依赖库路径,同时在链接器->常规->附加库目录中配置依赖库路径。
#include <iostream>
#include "Mylib.h"                                // 工程配置里面设置头文件包含路径

//#pragma comment(lib,"../Debug/staticlib.lib")   // 指定路径,当前路径为vcxproj文件所在路径
//#pragma comment(lib,"staticlib.lib")            //工程配置里面可以配置,就可以不填写路径了;(链接器附加库目录中配置)
// 可以在visual studio里面配置
using namespace std;
int main(int argc, char **argv)
{
	STATIC_LIB::PrintHello();
	system("pause");
	return 0;
}

动态库

动态库工程生成一个引入库lib文件和dll文件。对一个DLL文件来说,其引入库文件(.lib)包含该DLL导出的函数和变量的符号名,而.dll文件包含该DLL实际的函数和数据。动态库的引入库文件和静态库文件有着本质的区别。

代码里面设置导出符号:

//MyLib.h
#pragma once
#ifndef _STATIC_LIB_H_
#define _STATIC_LIB_H_
#include <iostream>
namespace STATIC_LIB
{
	extern "C" __declspec(dllexport) void __cdecl  PrintHello();
}
#endif

// MyLib.cpp
#include "MyLib.h"
extern "C" __declspec(dllexport) void __cdecl STATIC_LIB::PrintHello()
{
	std::cout << "Hello world!" << std::endl;
}

动态库使用方式有两种:一种是“隐式调用”,另外一种是“显示调用”。

隐式调用:

需要引入库.lib文件,同时在visual studio里面配置。需要在链接器->常规->附加库目录中配置依赖库路径,同时在链接器->常规->附加库目录中配置依赖库路径。

#include <iostream>
#include "Mylib.h"  // 需要include头文件
using namespace std;
int main(int argc, char **argv)
{
	STATIC_LIB::PrintHello();
	system("pause");
	return 0;
}

显示调用:

不需要使用引入库.lib文件,也不需要include头文件,直接使用函数加载库:

#include <iostream>
//#include "Mylib.h"  // 不用include头文件;
#include <windows.h>
using namespace std;
typedef void(*func)(void);
int main(int argc, char **argv)
{
	HMODULE hDll = LoadLibrary("staticlib.dll");
	if (hDll != NULL)
	{
		func f = (func)GetProcAddress(hDll, "PrintHello");  // 名字要一致,否则返回空指针;
		if (f != NULL)
		{
			f();
		}
	}
	FreeLibrary(hDll);
	system("pause");
	return 0;
}

参考文献:

  1. dll 导出函数名的那些事
  2. windows 动态库的封装以及调用
  3. 如何制作windows下的dll(动态链接库)以及如何使用DLL文件
  4. Dll制作与使用教程
  5. DLL编写教程
  6. 手把手教你如何制作和使用lib和dll
  7. windows中静态库lib和动态dll的区别及使用方法
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值