vs2019编写动态链接库并自己使用

本文详细介绍如何在Visual Studio 2019中创建动态链接库(DLL),并演示了如何在另一项目中加载和使用自编写的DLL。文章深入解析DLLMain函数的作用及调用时机,同时提供了使用C语言编译器编译DLL以避免函数名粉碎的技巧。

**用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;
}
```**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值