开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 18960|回复: 130
收起左侧

[易源码分享] 凌哥 - 易语言骚操作之动态数.据类型_完全脱离易语言变量的束缚

  [复制链接]
结帖率:83% (39/47)
发表于 2020-2-20 16:37:45 | 显示全部楼层 |阅读模式   福建省宁德市
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
本帖最后由 凌哥 于 2020-2-20 16:39 编辑

相关帖子:

无可挑剔的多线程传任意数量参数例子,个人认为算是最完美、便捷的一种方案了
多线程高效率完美传递通用型数.据的一个例子,大家似乎对这个比较感兴趣?
取CPU基准速度(Ghz) - 敲黑板:易语言自定义数据类型数组内存格式及调用API时的转换

现在,又多了一个骚操作:将某个数.据类型/类 完全脱离易语言变量的束缚,把它变成孤儿指针
我从落叶的通用型哈希表那边学来的:哈希表类_汇编版(HashMap_ASM) 支持自定义数据值
核心思路如下图:

1.png

当我们在代码中引用 局_自定义数据 的时候,易语言才会初始化这个变量,如果没有引用,这个变量在编译后其实是不存在的
这时候,我们在子程序开头执行这么一段汇编代码:

mov eax,[ebp-0x4]
leave
ret 0x4

这段汇编代码的意思是,将第一个变量的值写入eax(返回值) 然后 ret 4 让易语言的这个子程序直接返回
这时候,因为我们用了汇编代码让子程序直接返回的,没有经过易语言的控制,所以这个变量1的地址不会被释放
到此,我们就成功将这个变量的数据完全独立出来了
接下来就是如何释放这个变量的数据呢?
原理看下图:

1.png

为什么这个子程序需要声明一个局部变量呢?而且还是静态属性(全局变量)
因为我们要让易语言IDE的语法检查通过,子程序返回值是 数据类型1 我们写的 返回() 也要是数据类型1
这个变量唯一的用途就是让我们通过语法检查仅此而已
接着我们再看汇编代码:

mov eax,[ebp+0xC]
leave
ret 0x8

这段汇编代码的意思是,将返回值的数据设置为参数1,然后依旧是强制返回,不通过易语言
子程序执行后,如果没有用变量来接收返回值的话,他就会被调用处释放

接下来看看如何使用:

1.png

我们可以直接申请出一段内存地址,写入自定义数据类型/类
然后将它传递给线程,并且不需要考虑局部变量释放的问题,因为 局_指针 里面存放的就是独立的变量数据
接着在线程里面,取回这个数据就可以完美读写了

怎样使用其它数据类型

将 动态数据类型(类) 中的 数据类型1 改成你需要操作的数据类型即可(共6处)

读写性能测试

1.png

1.png



动态xx类型.e (640.19 KB, 下载次数: 315)

点评

吴涛辛辛苦苦整合翻译出来,你一下子就还原了..   江苏省徐州市  发表于 2020-2-26 23:34
吴涛内心:*************   江苏省南通市  发表于 2020-2-23 00:30
吴涛辛辛苦苦整合翻译出来,你一下子就还原了..   广东省深圳市  发表于 2020-2-21 22:31
吴涛辛辛苦苦整合翻译出来,你一下子就还原了..   河北省沧州市  发表于 2020-2-21 19:20
吴涛辛辛苦苦整合翻译出来,你一下子就还原了..   广东省茂名市  发表于 2020-2-20 18:05

评分

参与人数 8好评 +6 精币 +22 收起 理由
易语言资源网 + 1 + 5 支持开源~!感谢分享
MrSimple + 1 + 2 支持开源~!感谢分享
1051496412 + 1 + 5 新技能已get√
mrzcpo + 2 新技能已get√
多啦A夢 + 1 + 2 大佬最近很活跃
wly + 1 + 2 新技能已get√
刘海斌 + 1 + 3 感谢分享,很给力!~
ds9660 + 1 思路挺好,但是和其他方案有何区别

查看全部评分


本帖被以下淘专辑推荐:

结帖率:93% (25/27)

签到天数: 1 天

发表于 5 小时前 高大上手机用户 | 显示全部楼层   山东省济南市
好像易语言谢谢
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2024-5-21 11:20:18 | 显示全部楼层   广东省深圳市
666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (34/34)

签到天数: 21 天

发表于 2024-3-15 11:47:08 | 显示全部楼层   福建省三明市
我看不懂,但大受震撼
回复 支持 反对

使用道具 举报

签到天数: 19 天

发表于 2024-2-20 02:15:31 | 显示全部楼层   新疆维吾尔自治区博尔塔拉蒙古自治州
学习一下,感谢分享
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)
发表于 2023-7-13 14:39:15 | 显示全部楼层   福建省泉州市
谢谢分享
回复 支持 反对

使用道具 举报

签到天数: 14 天

发表于 2023-5-16 10:21:59 | 显示全部楼层   广东省茂名市
谢谢分享
回复 支持 反对

使用道具 举报

签到天数: 13 天

发表于 2023-4-28 17:24:06 | 显示全部楼层   河北省石家庄市

谢谢分享
回复 支持 反对

使用道具 举报

结帖率:97% (369/381)

签到天数: 20 天

发表于 2022-5-20 10:53:42 | 显示全部楼层   福建省泉州市
皮肤是精益的么
回复 支持 反对

使用道具 举报

发表于 2022-4-7 04:04:24 | 显示全部楼层   天津市天津市
6666666666666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2022-4-6 23:40:22 | 显示全部楼层   四川省内江市
牛BPLUS.谢谢大哥
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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