如何编写DLL文件

本文介绍了如何在C++和C环境中编写DLL文件,包括DLL的基本概念、如何使用Visual Studio创建和理解DLL项目,以及DllMain函数的作用。通过实例演示了如何调用DLL并展示了关键代码部分。适合初学者了解Windows编程中的动态链接库技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何编写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函数

  1. DLL_PROCESS_ATTACH:这个是dllmain文件被映射到地址空间时才会被调用的,也就是只有第一次被调用时才会运行这一段
  2. DLL_PROCESS_DETACH:当DLL被从进程的地址空间解除映射时
  3. DLL_THREAD_ATTACH:这个是进程创建线程的时候
  4. 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调用的一个简单操作,希望可以帮到你

Hope this blog can help you!

PB(PowerBuilder)是一种集成开发环境(IDE),可以用于快速开发Windows应用程序。虽然PB主要用于开发桌面应用程序,但也可以使用它来创建动态链接库(DLL文件。 要使用PB编写DLL文件,可以参考以下步骤: 1. 打开PB并创建一个新的非可视对象(Non-Visual Object)。 2. 在对象中添加功能代码。这些代码可以是PB的脚本语言,如PowerScript,也可以是其他支持的语言,如C++。 3. 在构建选项中选择“构建DLL”选项。 4. 编译和构建项目,生成DLL文件。在构建过程中,PB会将代码编译为相应的二进制文件,并将其打包到DLL中。 5. 在PB中,可以使用导出函数(External Functions)和方法(External Methods)来定义DLL文件的公共接口。这些接口允许其他应用程序调用DLL中的函数和方法。 6. 在应用程序中使用DLL文件。在其他PB应用程序或其他支持DLL调用的应用程序中,使用相应的接口来调用DLL中的函数和方法。 7. 在应用程序中使用DLL时,应确保使用正确的路径和文件名引用DLL文件。 需要注意的是,使用PB编写DLL文件可能需要对PB的特定功能和设置有所了解。此外,根据DLL中包含的功能和代码,可能还需要了解C++等其他编程语言。 总的来说,使用PB编写DLL文件可以通过创建非可视对象,在对象中添加代码,并在构建选项中选择“构建DLL”选项来完成。通过定义适当的接口使得其他应用程序可以调用DLL中的函数和方法,从而实现对DLL的使用和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值