动态库DLL
来源:互联网 发布:mac safari不显示图片 编辑:程序博客网 时间:2024/05/18 17:28
DLL本身为一个PE文件,而PE文件的导出表记录了哪些函数是需要导出的,也就是以下讲的实现DLL中函数的导出。
1、DLL的几种导出方式
(1) 第一种导出函数的方式
__declspec(dllexport) 函数名
例如:
__declspec(dllexport) int myAdd(int a, double b)
{
return a + b;
}
(2)第二种导出方式
模块定义文件(.def)来导出(不需要使用 __declspec(dllexport),但是需要使用.def文件声明哪些函数需要导出)
例如:
int mySub(int a, int b) { return a - b; }
(3)导出为C语言的方式,失去多态的性能(C++才具有多态)
extern "C" __declspec(dllexport) int myAdd(int a, int b){ return a + b;}
2、DLL的导入方式
(1)第一种导入dl的方式, 隐式调用
__declspec(dllimport) int myAdd(int a, float b);
#pragma comment(lib,”..\Debug\MyDll.lib”) // 导入一个dll对应的导入库。。。
(2)显示调用,相对于隐式调用,在程序升级后(更新DLL),不需要重新编译EXE文件,因为
MyDLL动态链接库里面的函数信息:
3、动态链接库发布
一般包含一个头文件,然后用户只需要链接lib文件和包涵头文件就可以了
客户调用事例:
#include “../WinDLL/WinDll.h”
#pragma comment(lib,”../Debug/WinDLL.lib”)
4、DLL应用程序的入口点
在调用DLL动态链接库的时候,会通过入口点加载动态链接库到内存中,才方便于程序的使用。(可以在程序的入口点这里加入想要的信息,用户在调用动态链接库的时候就会调用加载的信息)
BOOL WINAPI DllMain( HINSTANCE hModule,
DWORD dwReason,
LPVOID lpvReserved );
一般在这里进行一些资源的初始化以及资源的释放!
LoadLibrary时初始化资源,DLL_PROCESS_ATTACH
FreeLibrary时释放资源,DLL_PROCESS_DETACH
以上为DLL的相关学习笔记
- .DLL 动态连接库
- 动态链接库 (DLL)
- 动态链接库DLL
- 重载动态库 dll
- DLL动态连接库
- 动态链接库DLL
- 动态连接库dll
- 动态链接库 dll
- DLL动态链接库
- DLL 动态链接库
- DLL(动态链接库)
- 动态链接库DLL
- DLL,动态链接库
- 动态链接库 DLL
- 动态链接库DLL
- 动态链接库 dll
- 动态链接库DLL
- 动态链接库DLL
- JS数据类型转换
- OS ##处理器管理
- 11-23 Python 字符串数字练习 二元一次方程求解
- Linux term和WindowsDOS部分简单命令对照
- 如何在Linux下手动安装mongodb
- 动态库DLL
- 开始写博客了
- OS ##设备管理
- yahoo黄图识别-open nsfw
- Python列表和元组
- 快速排序实现
- java作业
- Android更新到API26之后,targetVersion26,调用系统相机拍照遇到的一个坑
- OS ##文件管理