- dll文件是给别人提供函数的,不会作为一个程序单独去运行,也就是没有什么第一行执行代码的概念
- 通常都不需要去管DllMain,不会在里面写代码
- DllMain会在程序运行、程序退出、线程被创建、线程被卸载时被调用
dll中的函数并不是都能够提供给其它可执行文件使用,只有导出的函数才可以
导出的方式有两种:- 声明导出
在函数的声明前加上:extern "C" _declspec(dllexport)
- def文件导出
#添加一个名为"xxx.def"的文件,并写入以下内容
LIBRARY DLL名
DESCRIPTION "my DLL"
EXPORTS
函数名 @ 序号 ; @1 表示导出函数的序号
- 声明导出
调用dll中函数的方式,有两种:
typedef void(*FUN)();
FUN g_Fun; int main(){ HMODULE hModule = LoadLibrary(L”Dll1.dll”); g_Fun = (FUN)GetProcAddress(hModule, “fun1”); g_Fun();
system("pause");
} ```
- lib文件的差别
随着dll一起生成的lib文件,称为导入库,里面是没有代码和数据的,是链接信息,供编译器在exe文件与dll文件之间做链接
还有一种是静态对象库,编译的时候会将静态库中使用到的代码数据编译到exe中,exe发布就不需要携带很多文件