书香 发表于 2024-3-1 05:55

【文本型:内部算法】

本帖最后由 书香 于 2024-3-1 05:56 编辑

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

先复习一下知识点

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


源码下载(测试的dll+调用的exe):


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

dll接口
.版本 2

.子程序 test, 文本型, 公开
.参数 字符1, 文本型
.参数 字符2, 文本型
.局部变量 结果, 文本型

结果 = 字符1 + 字符2 + “777”
返回 (结果)


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


大家一般熟悉的写法(内部算法):
.版本 2

    .子程序 _按钮_测试_文本_被单击
    .局部变量 字符1, 文本型
    .局部变量 字符2, 文本型
    .局部变量 返回值, 文本型

    字符1 = “111”
    字符1 = “222”

    返回值 = DLL命令_文本 (字符1, 字符2)
    调试输出 (字符1)


    .版本 2

    .DLL命令 DLL命令_文本, 文本型, "test.dll", "test", , dll命令表
      .参数 字符1, 文本型
      .参数 字符2, 文本型
   

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

但实际上的完整写法:
.版本 2
.支持库 spec

.子程序 _按钮_整数_被单击
.局部变量 字符1, 文本型
.局部变量 字符2, 文本型
.局部变量 字符1_指针, 整数型
.局部变量 字符2_指针, 整数型
.局部变量 返回值_指针, 整数型
.局部变量 返回值, 文本型

字符1 = “111”
字符2 = “222”

字符1_指针 = 申请内存 (100, )
字符2_指针 = 申请内存 (100, )

写到内存 (字符1, 字符1_指针, )
写到内存 (字符2, 字符2_指针, )

返回值_指针 = DLL命令_整数 (字符1_指针, 字符2_指针)

返回值 = 指针到文本 (返回值_指针)
调试输出 (返回值)


.版本 2
.DLL命令 DLL命令_整数, 整数型, "test.dll", "test"
    .参数 字符1, 整数型
    .参数 字符2, 整数型



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


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


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


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


(点击返回课程目录:https://www.52hb.com/thread-58658-1-1.html)

lies 发表于 2024-3-2 12:58

谢谢教程!

飞仙 发表于 2025-1-22 13:00

学习记录下:
.子程序 _按钮1_被单击
.局部变量 a, 文本型
.局部变量 b, 文本型
.局部变量 返回值_指针, 整数型
.局部变量 数据地址1, 整数型
.局部变量 数据地址2, 整数型

a = “dd”
b = “ff”
数据地址1 = 取变量数据地址 (a)
数据地址2 = 取变量数据地址 (b)
返回值_指针 = 字符相连 (数据地址1, 数据地址2)
调试输出 (返回值_指针)
编辑框1.内容 = 指针到文本 (返回值_指针)

----------------------------------------------

.DLL命令 字符相连, 整数型, "zcxl.dll", "字符相连"
    .参数 a, 整数型
    .参数 b, 整数型


----------------------------------------------------------------
.子程序 字符相连, 整数型, 公开
.参数 字串1, 整数型
.参数 字串2, 整数型
.局部变量 结果, 文本型, 静态


结果 = 指针到文本 (字串1) + 指针到文本 (字串2)
返回 (取变量数据地址 (结果))

飞仙 发表于 2025-1-22 13:02

.版本 2
.支持库 spec

.子程序 _按钮1_被单击
.局部变量 a, 文本型
.局部变量 b, 文本型
.局部变量 返回值_指针, 整数型
.局部变量 数据地址1, 整数型
.局部变量 数据地址2, 整数型

a = “dd”
b = “ff”
数据地址1 = 取变量数据地址 (a)
数据地址2 = 取变量数据地址 (b)
返回值_指针 = 字符相连 (数据地址1, 数据地址2)
调试输出 (返回值_指针)
编辑框1.内容 = 指针到文本 (返回值_指针)

------------------------------------------
.版本 2

.DLL命令 字符相连, 整数型, "zcxl.dll", "字符相连"
    .参数 a, 整数型
    .参数 b, 整数型

-----------------------------------------
.版本 2
.支持库 spec

.子程序 字符相连, 整数型, 公开
.参数 字串1, 整数型
.参数 字串2, 整数型
.局部变量 结果, 文本型, 静态


结果 = 指针到文本 (字串1) + 指针到文本 (字串2)
返回 (取变量数据地址 (结果))

页: [1]
查看完整版本: 【文本型:内部算法】