栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

windows动态库和静态库

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

windows动态库和静态库

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

静态库

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

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

    使用comment 显式调用,这样不用在visual studio 链接器->输入->附件依赖库里面配置依赖库,由于没有指定依赖库路径所有需要显示填写路径。使用comment 显式调用,同时需要在链接器->常规->附加库目录中配置依赖库路径。由于使用了comment所以不用在visual studio 链接器->输入->附件依赖库里面配置。隐式调用,需要在链接器->常规->附加库目录中配置依赖库路径,同时在链接器->常规->附加库目录中配置依赖库路径。
#include 
#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 
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 
#include "Mylib.h"  // 需要include头文件
using namespace std;
int main(int argc, char **argv)
{
	STATIC_LIB::PrintHello();
	system("pause");
	return 0;
}
显示调用:

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

#include 
//#include "Mylib.h"  // 不用include头文件;
#include 
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;
}
参考文献:
    dll 导出函数名的那些事windows 动态库的封装以及调用如何制作windows下的dll(动态链接库)以及如何使用DLL文件Dll制作与使用教程DLL编写教程手把手教你如何制作和使用lib和dllwindows中静态库lib和动态dll的区别及使用方法
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744502.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号