当前位置:手机游戏 > 手游资讯 > 新手问答 

动态链接库(2.动态链接库的生成和使用)

作者:哪吒游戏网

动态链接库(2.动态链接库的生成和使用),哪吒游戏网给大家带来详细的动态链接库(2.动态链接库的生成和使用)介绍,大家可以阅读一下,希望这篇动态链接库(2.动态链接库的生成和使用)可以给你带来参考价值。

1.什么是动态链接库

动态链接库(Dynamic-Link Library)通常包含程序员自定义的变量和函数动态链接库,可以在运行时动态链接到可执行文件中

2.动态库扩展名

Windows下是.dll,Linux下是.so

3.Windows系统动态链接库

Windows操作系统核心有三个动态链接库(Kernel32.dll、User32.dll、Gdi32.dll),这些动态链接库构成了Win32 API函数

4.动态链接库的优点

1)节省内存和代码重用:当应用程序使用动态链接时,多个应用程序可以共享磁盘上单个DLL副本

2)可扩展性:DLL文件与EXE文件独立,只要接口不变,升级程序只需更新DLL文件不需要重新编译应用程序

3)复用性:DLL的编制与具体的编程语言以及编译器无关,不同语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数

5.动态链接库的缺点

DLL地狱(DLL HELL)

6.创建动态链接库

1)创建DLL项目

2)添加.h头文件和.cpp文件

和静态库的写法一样

在.cpp中:

#include "func.h"
#include "stdafx.h"
int SquareSum(int a, int b)
{
	return (a*a + b * b);
}
int SumSquare(int a, int b)
{
	return ((a + b)*(a*b));
}

在.h文件中:

#pragma once
int SquareSum(int a, int b);
int SumSquare(int a, int b);

这种情况下,我们点击生成,发现的确生成了一个.dll文件,但是没有.lib文件,如果我们用Dependency打开这个.dll文件,发现这个动态库是一个空文件,里面什么函数也没有

3)使用extern “C” 和_declspec(dllexport)

在.cpp里面的每个函数前面添加:

extern "C" _declspec(dllexport)

完整的就是:

#include "func.h"
#include "stdafx.h"
extern "C" _declspec(dllexport) int SquareSum(int a, int b)
{
	return (a*a + b * b);
}
extern "C" _declspec(dllexport) int SumSquare(int a, int b)
{
	return ((a + b)*(a*b));
}

这样就生成了.lib文件和.dll两个文件

自己在VS2020中测试只在函数实现的地方加了extern "C" 和_declspec(dllexport),并没有在函数声明的地方添加它,得到了两个文件;也测试了在函数实现和声明的地方都添加它,得到了两个文件;但如果只在函数声明的地方添加它而不在函数实现的地方添加,这样便还是只得到了.dll文件而没有.lib文件

4)生成.lib和.dll文件

7.使用动态链接库

1)创建一个应用程序项目

2)编写程序在.cpp中:

#include 
using namespace std;
#include "func.h"
#pragma comment(lib,"DynamicLib32.lib")
int main()
{
	int a = 34;
	int b = 32;
	cout << SquareSum(a, b) << endl;
	cout << SumSquare(a, b) << endl;
	system("pause");
	return 0;
}

.h中(.h文件可以从生成dll项目中拷贝过来动态链接库,但需要注意下面几点):

#pragma once
int SquareSum(int a, int b);
int SumSquare(int a, int b);

如果在.h中直接这样,便会编译错误:

总结:以上内容就是针对动态链接库(2.动态链接库的生成和使用)详细阐释,如果您觉得有更好的建议可以提供给哪吒游戏网小编,动态链接库(2.动态链接库的生成和使用)部分内容转载自互联网,有帮助可以收藏一下。