易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

易语言骚操作之动态数据类型   [复制链接]

    2020-03-05 10:03:33
    模块控件源码
    易语言资源网
    4778 次浏览
    来源链接

将某个数.据类型/类 完全脱离易语言变量的束缚,把它变成孤儿指针
我从落叶的通用型哈希表那边学来的:哈希表类_汇编版(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



点我下载 (已有 170 次下载)

引用模块


源码文件名 模块文件名
动态xx类型.e
凌哥E编程模块.ec


引用支持库


源码文件名 支持库文件名 支持库标识
动态xx类型.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:美易自绘做的一个桌面 简约版...     下一篇:易语言模拟C下的printf函数...