**用vs2019的编译器编写动态链接库,并自己使用自己编写好的动态链接库!!


创建一个动态链接库的项目,发现其中共有两个源文件,与两个头文件。
BOOL APIENTRY DllMain( HMODULE hModule, //模块句柄
DWORD ul_reason_for_call, //调用原因
LPVOID lpReserved //保留字节
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH: //被其他程序加载
case DLL_THREAD_ATTACH: //当其他程序启动了一个线程的时候
case DLL_THREAD_DETACH: //当其他程序某个线程终止运行的时候
case DLL_PROCESS_DETACH: //被其他程序卸载
break;
}
return TRUE;
}
如图是dllmain源文件里的代码,当调用或者接受dll的时候自动调用dllmain这个函数!!
例如在该源文件里添加如下代码!然后在仍外一个项目里面加载dll会有如下现象:


我们在pch的头文件与源文件里写一个函数实现与申明,并生成,然后再另外一个项目里面调用!


这里必须要用C语言的编译器,因为c++的编译器有函数名粉碎,要想在另一个项目里调用,则要用extern “C” 告诉编译器用C语言的编译器编译。
#include<stdio.h>
#include<windows.h>
int main() {
HMODULE module = LoadLibrary("Dlldemo.dll"); //返回的是该dll的句柄,实际就是一个指针
if (module == NULL)
{
printf("加载DLLdemo.dll动态库失败\n");
}
typedef void(*printfhellofun)(); // 定义函数指针类型
printfhellofun printfhello; //定义该函数指针类型的变量
//GetProcAddress是windows.h里面的函数,该函数返回的是我们查找函数的函数指针
//两个参数分别为dll的句柄,已经函数名,因为这里要用函数名所以我们在编译dll的时候要用C语言的编译器
printfhello = (printfhellofun)GetProcAddress(module, "printfhello");
printfhello(); //调用该函数!!
return 0;
}
```**
本文详细介绍如何在Visual Studio 2019中创建动态链接库(DLL),并演示了如何在另一项目中加载和使用自编写的DLL。文章深入解析DLLMain函数的作用及调用时机,同时提供了使用C语言编译器编译DLL以避免函数名粉碎的技巧。

7514

被折叠的 条评论
为什么被折叠?



