书香雅阁论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

【文本型:内部算法】

[复制链接]

451

主题

474

帖子

158万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1581710
发表于 2024-3-1 02:11:29|字数:2,046 | 显示全部楼层 |阅读模式
LV10 站长

这一节课非常重要,是框架开发的理论基础,这也是资深的易语言编程爱好者都不知道的一个技术点

先复习一下知识点

049:【dll讲解】              050:【dll的开发】            051:【dll的调用】


源码下载:

测试的dll: test.dll.e (2.25 KB, 下载次数: 198)
调用的exe: 调用dll的exe.e (148.88 KB, 下载次数: 203)

易语言的dll传递的数据是可以文本型的,这个大家应该都知道

dll接口
  
子程序名返回值类型公开备 注
test文本型
参数名类 型参考可空数组备 注
字符1文本型   
字符2文本型   
变量名类 型静态数组备 注
结果文本型  
结果 = 字符1 + 字符2 + “777”
返回 (结果)


那么其他语言如何调用这个dll,很多语言的设定中返回值是没有文本型这个东西的,你跟对方说说返回值是文本型对方可能直接就懵了,这个文本型其实是易语言的内部算法,这个dll实际上返回值就是整数型的

大家一般熟悉的写法(内部算法):

  
.版本 2[indent].子程序 _按钮_测试_文本_被单击
变量名类 型静态数组备 注
字符1文本型  
字符2文本型  
返回值文本型  
字符1 = “111”
字符1 = “222”
返回值 = DLL命令_文本 (字符1, 字符2)
调试输出 (字符1)
DLL命令名返回值类型公开备 注
DLL命令_文本文本型 dll命令表
DLL库文件名:
test.dll
在DLL库中对应命令名:
test
参数名类 型传址数组备 注
字符1文本型  
字符2文本型  



————————————————————————————————————————

但实际上的完整写法:
  
子程序名返回值类型公开备 注
_按钮_整数_被单击  
变量名类 型静态数组备 注
字符1文本型  
字符2文本型  
字符1_指针整数型  
字符2_指针整数型  
返回值_指针整数型  
返回值文本型  
字符1 = “111”
字符2 = “222”
字符1_指针 = 申请内存 (100, )
字符2_指针 = 申请内存 (100, )
写到内存 (字符1, 字符1_指针, )
写到内存 (字符2, 字符2_指针, )
返回值_指针 = DLL命令_整数 (字符1_指针, 字符2_指针)
返回值 = 指针到文本 (返回值_指针)
调试输出 (返回值)
DLL命令名返回值类型公开备 注
DLL命令_整数整数型 
DLL库文件名:
test.dll
在DLL库中对应命令名:
test
参数名类 型传址数组备 注
字符1整数型  
字符2整数型  



i支持库列表   支持库注释   
spec特殊功能支持库



看完这篇文章就知道了,文本型是易语言的内部算法,传入文本型参数,实际上就是先把数据写入内存,然后传递一个整数型的地址,返回文本型其实就是返回了一个整数型的地址,我们可以使用读取内存的方式读取出数据


本技术应用范围
1:跨语言调用
网上很多特殊功能的dll都是易语言写的,人家的说明就是说返回文本型,我们需要使用其他语言调用dll但是又不知道如何传递这个文本型,这种单子也很多,就卡在不知道如何传递文本型数据上


2:拓展翻译
比如全网很多框架(机器人,验证码识别,图像识别)都是用易语言写的,需要我们写dll来完成功能拓展,往往人家作者只提供了易语言模板,我们想使用其他语言对接都没办法,因为不知道文本型数据怎么传递


3:框架开发
这个就有点遥远了,我们使用易语言开发框架的时候自然是需要提供其他语言的对接模板的,但是其他语言没有文本型,不使用文本型就显得对易语言用户不太友好了(难度变大),那么以后就可以使用本节的方法编写非易语言对接文档了


(点击返回课程目录https://shuxiangyage.net/forum.php?mod=viewthread&tid=1134

回复

使用道具 举报

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

本版积分规则

QQ|Archiver|小黑屋|书香雅阁论坛 ( 湘ICP备17011672号-3 )

GMT+8, 2024-11-21 17:34 , Processed in 0.088754 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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