如何编写DLL文件
阅读本文请首先学习C++以及C语言的使用,这是基础
什么是dll文件
DLL文件: 中文翻译为动态链接库,windows系统程序提供了很多的可以被调用的可执行文件,就像我们软件开发的时候,从来没有自己去写一个程序的图形化界面什么的,这是因为Windows系统都给我们提供了,我们只需要去调用就可以使用了。比如我们经常看到的kernel32.dll(包含管理内存,进程和线程相关的函数),User32.dll(大部分是用户接口函数)。
主要是如果步提供dll文件的话那么很多应用和开发者就得自己去编写底层的代码,这将会给软件开发者带来很大的困难。
如何创建dll文件
本人使用的VS进行构建,本人比较建议使用VS进行windows代码开发,毕竟是微软自己开发的编译器。
新建项目,选择新建dll项目
这样就算创建了一个dll文件,至于里面的是什么东西,我们也不用管,只需要知道我们的代码都是在dllmain.cpp里面编写就可以了,dll生成的方法也根普通的C++文件不一样,我们直接在DLL项目中右键,然后点击生成就可以了。
我们就可以发现生成了一个dll文件
dll文件代码简单介绍
我们VS自动帮我们生成了一些代码,简单介绍以下这些代码都是干啥用的
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
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函数
静态链接或者动态链接(LoadLibrary调用等)都会调用DllMain这个函数,我们可以通过以下的四个情况来判断是何时使用这个dllmain函数
- DLL_PROCESS_ATTACH:这个是dllmain文件被映射到地址空间时才会被调用的,也就是只有第一次被调用时才会运行这一段
- DLL_PROCESS_DETACH:当DLL被从进程的地址空间解除映射时
- DLL_THREAD_ATTACH:这个是进程创建线程的时候
- DLL_THREAD_DETACH:这是线程结束时调用的
一个简单实例
我们计划用Dll文件下载一个html网页
这是我们在dllmain中的代码
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include<windows.h>
#include "stdio.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
printf("dll load\n");
}
我们可以生成得到一个dll文件,然后我们要想办法调用这个文件
#include "windows.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
HMODULE g_hDll = LoadLibrary("D:\\Code\\source\\repos\\DLLStudy\\Debug\\DLLStudy.dll");
return 0;
}
因为我把这个dll文件中的switch给删了,所以不管是哪种调用都会执行这个printf函数,所以我们会发现这个一共被调用了两次。
ok这就是dll调用的一个简单操作,希望可以帮到你文章来源:https://www.toymoban.com/news/detail-451523.html
Hope this blog can help you!文章来源地址https://www.toymoban.com/news/detail-451523.html
到了这里,关于如何编写DLL文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!