动态链接库
动态链接库:
动态链接库英文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();


浙公网安备 33010602011771号