书香雅阁论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

【火山调用易语言DLL②】

[复制链接]

384

主题

407

帖子

158万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1581367
发表于 2024-3-6 23:05:30|字数:1,316 | 显示全部楼层 |阅读模式
LV10 站长

本节探讨易语言DLL如何火山exe传递文本类型的返回数据

易语言DLL代码
  
子程序名返回值类型公开备 注
test文本型
参数名类 型参考可空数组备 注
接收的文本1文本型   
变量名类 型静态数组备 注
文本1文本型  
返回结果文本型  
文本1 = 编码_Unicode到Ansi (到字节集 (接收的文本1))
返回结果 = “我接收到文本了,文本是:” + 文本1
返回 (返回结果)  ' 注意返回的数据是gbk编码的



火山错误写法
图片.png

编程语言会报错 ,就是返回值不能是文本型

易语言返回值是文本型,火山不支持文本型返回值,要解决这个问题,就涉及到我们的另外一个理论了
易语言知识:【文本型:内部算法】


因此我们知道,易语言实际上的返回值就是整数型,是一个地址,因此我们应该使用一个整数型的变量去接收这个返回值,但是为了规范,我们还是使用变整数去接受
【数据类型:变整数】

图片.png

我们可以通过读取指针的方式获得传过来的文本数据,但是是GBK编码的,无法在火山上渲染显示出来,因此我们要用到多字节
【文本与多字节】

重点:
只要涉及到GBK编码的数据读取,我们首先就要想到多字节与文本的操作,而不是想着先用文本变量接收然后编码转换

火山的调用代码
图片.png

运行效果:
图片.png

火山的调用代码:
[voldev] 纯文本查看 复制代码
<火山程序 类型 = "通常" 版本 = 1 />

类 我的主窗口 <基础类 = 窗口 注释 = "样例主窗口" @视窗.布局 = "client_size = \"500, 300\"" 标题 = "我的主窗口">
{
    变量 按钮1 <类型 = 按钮 隐藏值属性 = "0" @视窗.布局 = "id = 101\r\npos = \"149, 134, 176, 72\"" 标题 = "网络">

    方法 按钮_被单击 <接收事件 类型 = 整数 注释 = "当按钮被单击后发送此事件" "">
    参数 来源对象 <类型 = 按钮 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    {
        变量 数据地址 <类型 = 变整数>
        变量 返回值 <类型 = 文本型>


        如果 (来源对象 == 按钮1)
        {
            数据地址 = test ("测试")
            返回值 = 多字节指针到文本 (数据地址)
            信息框 (返回值, , )

        }

        返回 (0)
    }

    方法 test <公开 静态 类型 = 变整数 @视窗.输入 = "test.dll" @输出名 = "test">
    参数 文本1 <类型 = 文本型>
    {

    }
}


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



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 21:18 , Processed in 0.138928 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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