找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 288|回复: 0

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

[复制链接]

63

主题

227

回帖

1056

积分

管理员

积分
1056
发表于 2024-7-17 18:10:04 | 显示全部楼层 |阅读模式
DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件


1.新建DLL动态库程序
文件-新建项目-输入项目名称-保存文字等:


以下为项目结构的三个必须文件xh/xc/rc


可以看到项目属性类型为DLL动态库程序


xc源码文件里默认的入口函数(里面的调试输出是可以屏蔽的)
  1. 函数 整型 入口函数_动态库() //DLL程序入口函数, 程序启动优先进入此函数
  2. {
  3.         调试输出("动态库程序", 模块句柄)
  4.          
  5.         如果 DLL_进程附加 == 被调用原因
  6.         {
  7.                 调试输出("DLL_进程附加")
  8.         }
  9.         否则 DLL_线程附加 == 被调用原因
  10.         {
  11.                 调试输出("DLL_线程附加")
  12.         }
  13.         否则 DLL_线程分离 == 被调用原因
  14.         {
  15.                 调试输出("DLL_线程分离")
  16.         }
  17.         否则 DLL_进程分离 == 被调用原因
  18.         {
  19.                 调试输出("DLL_进程分离")
  20.         }
  21.         返回 真 //成功返回真
  22. }
复制代码

2.编写导出函数
格式为:函数 编译方式C 导出 返回类型 调用约定 函数名称(参数列表)
调用约定--如不填写默认为:cdecl  
下面是一个简单的_add(两个数相加)导出函数:
  1. 函数 编译方式C 导出 整型 WINAPI _add(整型 a, 整型 b)
  2. {
  3.         返回 a + b
  4. }
复制代码

WINAPI-为stdcall约定,易语言默认的也是这个约定
这个格式是不是发现和之前学的-零基础入门篇-011-函数的定义与调用-差不多啊


3.参数返回结构
  1. 函数 编译方式C 导出 空类型 WINAPI _add3(整型 a, 返回结构类型 &y)
  2. {
  3.         y = {"我是炫语言传出文本", a, 3.2f}
  4. }
  5. 结构体 返回结构类型
  6. {
  7.         字符型 *我是文本
  8.         整型 我是整型
  9.         浮点型 我是浮点
  10. }
复制代码
注意:跨语言交互不支持文本型相关类型,所以这里用字符型代替
  1. 函数 编译方式C 导出 字符型 *_add1()
  2. {
  3.         返回 "返回的文本"
  4. }
  5. 函数 编译方式C 导出 返回结构类型 WINAPI _add2(字符型 *文本, 整型 a)
  6. {
  7.         返回结构类型 y = {文本, a, 2.1f}
  8.         返回 y
  9. }
复制代码

最后使用DLL查看工具, 查看导出的函数:


注意:当项目类型为DLL时,项目属性里默认勾选自动生成DEF文件,此方式一般为DLL导出WINAPI调用约定的函数
如不勾选自动生成def文件,导出函数名会跟随@符号







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|炫语言 | 炫彩界面库 | 用户所需, 正是我所做! ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-12-4 01:16 , Processed in 0.075649 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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