炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 219|回复: 0

[图文教程] 零基础进阶篇-018-编写DLL动态库文件

[复制链接]
  • TA的每日心情
    难过
    2021-3-17 08:38
  • 发表于 2024-3-5 18:52:11 | 显示全部楼层 |阅读模式
    本帖最后由 易团雪 于 2024-3-5 19:06 编辑

    DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件
    1.新建DLL动态库程序
    文件-新建项目-输入项目名称-保存文字等:
    QQ图片20240305153223.png
    以下为项目结构的三个必须文件xh/xc/rc
    QQ图片20240305153643.png
    可以看到项目属性类型为DLL动态库程序
    QQ图片20240305154615.png
    xc源码文件里默认的入口函数(里面的调试输出是可以屏蔽的)
    [C++] 纯文本查看 复制代码
    函数 整型 入口函数_动态库() //DLL程序入口函数, 程序启动优先进入此函数
    {
            调试输出("动态库程序", 模块句柄)
            
            如果 DLL_进程附加 == 被调用原因
            {
                    调试输出("DLL_进程附加")
            }
            否则 DLL_线程附加 == 被调用原因
            {
                    调试输出("DLL_线程附加")
            }
            否则 DLL_线程分离 == 被调用原因
            {
                    调试输出("DLL_线程分离")
            }
            否则 DLL_进程分离 == 被调用原因
            {
                    调试输出("DLL_进程分离")
            }
            返回 真 //成功返回真
    }
    2.编写导出函数
    格式为:函数 编译方式C 导出 返回类型 调用约定 函数名称(参数列表)
    调用约定--如不填写默认为:cdecl  
    下面是一个简单的_add(两个数相加)导出函数:
    [C++] 纯文本查看 复制代码
    函数 编译方式C 导出 整型 WINAPI _add(整型 a, 整型 b)
    {
            返回 a + b
    }
    WINAPI-为stdcall约定,易语言默认的也是这个约定
    这个格式是不是发现和之前学的-零基础入门篇-011-函数的定义与调用-差不多啊
    3.参数返回结构
    [C++] 纯文本查看 复制代码
    函数 编译方式C 导出 空类型 WINAPI _add3(整型 a, 返回结构类型 &y)
    {
            y = {"我是炫语言传出文本", a, 3.2f}
    }
    结构体 返回结构类型
    {
            字符型 *我是文本
            整型 我是整型
            浮点型 我是浮点
    }
    注意:目前还不支持文本型相关类型,所以这里用字符型代替
    [C++] 纯文本查看 复制代码
    函数 编译方式C 导出 字符型 *_add1()
    {
            返回 "返回的文本"
    }
    函数 编译方式C 导出 返回结构类型 WINAPI _add2(字符型 *文本, 整型 a)
    {
            返回结构类型 y = {文本, a, 2.1f}
            返回 y
    }
    最后使用DLL查看工具, 查看导出的函数:
    QQ图片20240305184510.png
    注意:当项目类型为DLL时,项目属性里默认勾选自动生成DEF文件此方式一般为DLL导出WINAPI调用约定的函数
    如不勾选自动生成def文件,导出函数名会跟随@符号
    QQ图片20240305184910.png




    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

    GMT+8, 2024-5-2 12:45 , Processed in 0.072404 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表