动态库DLL

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的相关学习笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值