DLL动态链接库 总结
看了孙鑫老师的书和笔记 自己做了下 小做总结
DLL 动态库,静态库。动态库节约磁盘空间,静态库体积大。(不是很清楚)
两种加载方式:隐式调用、动态加载。
1.隐式调用 会有两天文件重要:lib、dll
_declspec(dllexport) 放在出口函数前 在lib中记录 lib和dll都放在当前文件目录下
在工程/project 设置/setting 常规/general那一条 选连接/link 对象/库模块 XXX.lib 确定就OK了
在文件中对从dll来的函数定义 extern int add(int a,int b);
extern int subtract(int a,int b);
这种写法一般不用,可以写成//_declspec(dllimport) int add(int a,int b);
//_declspec(dllimport) int subtract(int a,int b);
如果要写个dll的同文件 用宏取代 _declspec(dllimport)
Dll1.h
#ifdef DLL1_API
#else
#define DLL1_API extern "C" _declspec(dllimport) //extern "C" C大写 防止名字变
#endifDLL1_API int _stdcall add(int a,int b);
DLL1_API int _stdcall subtract(int a,int b);
Dll1.cpp的代码:
#define DLL1_API extern "C" _declspec(dllexport)
.cpp 别忘了头文件 #include "Dll1.h" #include <Windows.h>
2.动态加载
还有一个写.txt 改成后缀.def
LoadLibrary();
HINSTANCE hInst;
hInst=LoadLibrary("DLL2.dll");
typedef int (*ADDPROC) (int a,int b);
ADDPROC add=(ADDPROC)GetProcAddress(hInst,"add");
不用extern那些 ,不用link 就OK了
看了孙鑫老师的书和笔记 自己做了下 小做总结
DLL 动态库,静态库。动态库节约磁盘空间,静态库体积大。(不是很清楚)
两种加载方式:隐式调用、动态加载。
1.隐式调用 会有两天文件重要:lib、dll
_declspec(dllexport) 放在出口函数前 在lib中记录 lib和dll都放在当前文件目录下
在工程/project 设置/setting 常规/general那一条 选连接/link 对象/库模块 XXX.lib 确定就OK了
在文件中对从dll来的函数定义 extern int add(int a,int b);
extern int subtract(int a,int b);
这种写法一般不用,可以写成//_declspec(dllimport) int add(int a,int b);
//_declspec(dllimport) int subtract(int a,int b);
如果要写个dll的同文件 用宏取代 _declspec(dllimport)
Dll1.h
#ifdef DLL1_API
#else
#define DLL1_API extern "C" _declspec(dllimport) //extern "C" C大写 防止名字变
#endifDLL1_API int _stdcall add(int a,int b);
DLL1_API int _stdcall subtract(int a,int b);
Dll1.cpp的代码:
#define DLL1_API extern "C" _declspec(dllexport)
.cpp 别忘了头文件 #include "Dll1.h" #include <Windows.h>
2.动态加载
还有一个写.txt 改成后缀.def
LoadLibrary();
HINSTANCE hInst;
hInst=LoadLibrary("DLL2.dll");
typedef int (*ADDPROC) (int a,int b);
ADDPROC add=(ADDPROC)GetProcAddress(hInst,"add");
不用extern那些 ,不用link 就OK了
本文总结了DLL动态链接库的基本概念,包括其相对于静态库的优势,以及两种加载方式:隐式调用和动态加载。对于隐式调用,详细介绍了如何使用_declspec关键字,设置链接库,并在代码中声明函数。而对于动态加载,提到了LoadLibrary和GetProcAddress的使用,以及创建.def文件的方法。
11万+

被折叠的 条评论
为什么被折叠?



