动态链接库

 


动态链接库:

动态链接库英文DLL 是Dynamic Libarary得缩写。

DLL中包含若干公用的代码、数据等,可供其他模块(DLL或exe文件等)使用

DLL中并不是所有的函数都必须供其他模块使用,只有经过** 导出(export)**后才允许被外部正常调用

动态的由来

DLL最初用于节约应用程序所需要的磁盘空间和内存空间。早前在传统的非共享库中,一部分代码简单的附加到调用的程序中,

如果两个程序同时调用一个子程序,就会出现两份代码

WindowsAPI就存在与动态链接库中。对于多个进程共同使用的DLL文件来说,在屋里内存中只有一份文件,不过是被分别映射到了不同的进程内存空间,从而极大的降低了内存的消耗

DLL与Exe的区别

入口函数:DllMain函数是DLL模块的默认入口点。当windows加载DLL模块时调用这一函数。 如果没有DLLMain函数程序也能正常运行,此函数是可选函数。

DLL导出(方式一)

作为一个DLL文件,它的最大作用就是提供函数给其他的模块使用,提供的函数叫导出函数。

导出方式:1.声明导出 2.模块定义文件导出

除了导出函数外,dll文件还可以导出遍历,c++类

extern "C" declspec(dllexport) function

DLL方式导出二

创建文件为.def   

LIBRARY "mydll" //导出dll名称 
EXPORTS
my_min @ 1 //函数名 @序号


对于dll项目,编译器通常会产生两个文件,分别是 .DLL.lib其中dll是动态链接库,保存了所有的代码和数据,lib是导入库
保存了一些符号和地址的对应信息。不能单独使用,必须与dll共存。用于动态链接库的隐式链接。

DLL导入

通过隐式链接的方式调dll导出的函数

#pragma comment(lib,"xx.lib")
extern "C" int my_export(int a ,int b);

显示链接方式调用导出函数

LoadLibrary()API函数

//加载dll 参数:dll的文件路径
  HMODULE hModule = LoadLibrary(L"mydll.dll") ;
//获取相应函数 第一个参数 模块句柄 第二个参数: 函数的名称 
  GetProcessAddress(hModule,"");
  FreeLibrary();

posted @   不会笑的孩子  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示