开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 400|回复: 6
收起左侧

[讨论] 返回 通用型 疑惑

[复制链接]
结帖率:100% (15/15)
发表于 2024-3-21 21:02:41 | 显示全部楼层 |阅读模式   福建省宁德市
  
变量名类 型静态数组备 注
返回文本变量文本型 
返回字节集变量字节集 
返回文本变量 = 取数据 ()
返回字节集变量 = 取数据 ()
子程序名返回值类型公开备 注
取数据通用型 
参数名类 型参考可空数组备 注
指针地址整数型
' 能从内存中判断出通用型返回值所赋值给的目标变量类型吗
' __asm{
' }
返回 (0)


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

结帖率:100% (15/15)

签到天数: 27 天

 楼主| 发表于 2024-3-22 23:27:50 | 显示全部楼层   福建省宁德市
在一些简易的函数场景下,可以用通用型,是个挺好的选择。
但是如果函数内部代码非常多,且分支较为复杂的场景,通用型返回则变得复杂化,还会导致很多意料之外的错误发生,非必要不推荐易友用伪通用型作为返回值。

这几天再在试练习用通用型做返回值
封装了注册表操作的命令
注册表读值大体分为几种数据类型:字符串、无符号整数、无符号长整数、字符串组、二进制(字节集)
由于注册表的键值可能存在宽字符的情况,想要做一个通用型返回,目前已实现。
可返回特定的变量类型。
如用文本接收,则返回文本类型;
用整数接收,返回整数
返回字节集等
逻辑分支多且复杂的情况下返回通用型变得异常繁琐复杂化,后期如果改动代码就麻烦了,且不易阅读。
附上简易代码及说明,供后人参考

  
文本 = 取通用型的值 ()
调试输出 (文本)
子程序名返回值类型公开备 注
取通用型的值通用型 
参数名类 型参考可空数组备 注
Type整数型
变量名类 型静态数组备 注
str文本型 
ret整数型 
' ebp - N 指向具体变量
' 例如要返回文本型的值
' 由于变量【ret】先被申明,此时变量【str】为:ebp-8
ret = 123
str = “1213”
' __asm{
' mov eax,dword [ebp - 0x08]
' mov ecx, 0x80000004
' leave
' retn 0x04
' }
返回 (0)


i支持库列表   支持库注释   
spec特殊功能支持库
  
文本 = 取通用型的值 ()
调试输出 (文本)
子程序名返回值类型公开备 注
取通用型的值通用型 
参数名类 型参考可空数组备 注
Type整数型
变量名类 型静态数组备 注
str文本型 
ret整数型 
' ebp - N 指向具体变量
' 例如要返回文本型的值
' 由于变量【str】先被申明,此时变量【str】为:ebp-4
str = “1213”
ret = 123
' __asm{
' mov eax,dword [ebp - 0x04]
' mov ecx, 0x80000004
' leave
' retn 0x04
' }
返回 (0)


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


回复 支持 反对

使用道具 举报

结帖率:100% (15/15)

签到天数: 27 天

 楼主| 发表于 2024-3-22 13:58:40 | 显示全部楼层   福建省宁德市
7ian 发表于 2024-3-22 13:48
文本型/字节集合并通用型的用法
https://bbs.125.la/forum.php?mod=viewthread&tid=14678786
(出处: 精易 ...

大佬能将返回值返回到通用型接收吗
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 4 天

发表于 2024-3-22 13:48:00 | 显示全部楼层   广东省广州市
大漠小鸟 发表于 2024-3-22 13:45
为了不重复定义多个W版本的子程序,模块的参数是通用型的,可以填写指针、文本、字节集

目前都统一返回 ...

文本型/字节集合并通用型的用法
https://bbs.125.la/forum.php?mod=viewthread&tid=14678786
(出处: 精易论坛)
回复 支持 反对

使用道具 举报

结帖率:100% (15/15)

签到天数: 27 天

 楼主| 发表于 2024-3-22 13:45:52 | 显示全部楼层   福建省宁德市
7ian 发表于 2024-3-22 12:15
先运行子程序再给变量,再说就算知道变量类型,你的子程序还要处理,就好像你用个参考参数一样,还不是判断 ...

为了不重复定义多个W版本的子程序,模块的参数是通用型的,可以填写指针、文本、字节集

目前都统一返回字节集,有时候用户取的是ansi码的文本字符串

所以想有没有办法得知 返回值是通用型的情况下,识别出用户是用的什么类型的变量来接收的返回值

如果提供的是文本型变量,内部做个处理(这个处理已经实现了),能返回文本或者字节集,但是如果不知道用户接收的变量类型,比如用的文本型接收,返回了字节集,那么易语言就会报错,提示变量错误之类的信息框

当然可以额外加一个参数,让用户填写返回类型,就是嫌麻烦,封装函数的作用就是减少代码书写量
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 4 天

发表于 2024-3-22 12:15:33 | 显示全部楼层   广东省广州市
先运行子程序再给变量,再说就算知道变量类型,你的子程序还要处理,就好像你用个参考参数一样,还不是判断参数是什么类型再给值,而且判断什么类型也不靠谱
回复 支持 反对

使用道具 举报

结帖率:81% (29/36)

签到天数: 28 天

发表于 2024-3-21 21:45:32 | 显示全部楼层   四川省泸州市
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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