找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 420|回复: 3

[图文教程] 零基础进阶篇-019-调用DLL动态库文件

[复制链接]

63

主题

217

回帖

1012

积分

管理员

积分
1012
发表于 2024-7-18 11:59:33 | 显示全部楼层 |阅读模式
上一节,学习了如何编写一个DLL动态库文件
那如何调用里面的函数呢?

调用方式有
1.头文件+DLL+lib文件配合调用---也可以称为静态隐式调用
2.内存调用DLL---把DLL放到资源文件中调用,程序不需要携带DLL文件
3.动态调用DLL---也可以称为动态显式调用
4.DLL导入表调用DLL---此方法为炫语言特有,其实可以叫动态调用。只是炫IDE自动封装了
接触过编程的可能对1.2.3有过一些了解,那第4又是什么鬼呢?

DLL导入表
格式:#DLL导入表[DLL文件名,编译方式,回调函数]---后面两个参数可以直接忽略不管

参数1:也可以是DLL路径+文件名,如:d:\\xc\\dll文件.dll

参数2:忽略为默认编译方式
参数3:可以自定义DLL文件目录,和参数1填写绝对路径一样
  1. 函数 文本型 设置_DLL目录回调(文本型 路径)
  2. {
  3.         路径 = "G:\\ft\\xc\\基础入门示例\\进阶篇\\018-编写DLL动态库文件\\Debug\\018-DLL动态库.dll"
  4.         返回 路径
  5. }
复制代码

下面是导入表代码后面两个参数忽略,默认文件路径为程序目录
  1. #DLL导入表["018-DLL动态库.dll"]
  2. {
  3.         函数 整型 WINAPI add(整型 a, 整型 i) : _add
  4.         函数 字符型 *add1() : _add1
  5.         函数 返回结构类型 WINAPI add2(字符型 *传入文本参数, 整型 i) : _add2
  6.         函数 空类型 WINAPI add3(整型 i, 返回结构类型 &传出结构参数) : _add3
  7. }
  8. 结构体 返回结构类型
  9. {
  10.         字符型  *我是文本
  11.         整型 我是整型
  12.         浮点型 我是浮点
  13. }
复制代码

函数格式:前面和之前学过的一样,后面:+ 原函数名称
注意:
1.调用约定一定要和编译的dll文件里函数声明一样
2.编译的调试版和发布版也要对应。不要DLL编译发布版,exe程序调试版。这样会出现意想不到的错误
3.DLL文件需要放到程序目录下,或自定义目录
有没有觉得熟悉的味道,是不是差不多和易语言的DLL声明差不多
到此声明就完成了。现在直接调用就好。如:add(1,10)





32

主题

142

回帖

730

积分

高级会员

积分
730
发表于 2024-7-18 12:30:47 | 显示全部楼层
这个DLL导入表得吐槽一下,被调用的dll函数不能多次声明.
建议用这种方法声明.最好能在生成dll时,生成相关的类代码,把公开的函数声明自动声明好写于新的.XC文件中.
例如这种:http://bbs.xcgui.com/forum.php?mod=viewthread&tid=42

63

主题

217

回帖

1012

积分

管理员

积分
1012
 楼主| 发表于 2024-7-18 13:02:01 | 显示全部楼层
C++中 是不能名称重复的,  DLL接口都是全局函数, 不需要类

5

主题

34

回帖

186

积分

注册会员

积分
186
发表于 2024-7-27 17:30:12 | 显示全部楼层
点赞,官方图文教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-21 18:46 , Processed in 0.070527 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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