下你所需,载你所想!
汇集开发技术源码资料

通过汇编和API实现的内存操作模块自带例程

:36.608KB :1 :2019-12-10 08:38:59

部分简介

注:RTLCOPYBYTES()、RTLCOPYMEMORY() 等函数不支持!//它们在微软定义中为 宏 macro 不属于 函数 function 所以无法采用声明API的方式处理
' 不过这些函数可以被模块中其他函数替代!//之所以想加进去,完美主义者!喜欢自虐!

_取通用数据类型()
注:经测试该函数不是很准确 有可能会误判 仅供参考 请慎用
自定义类型 或 函数指针 这两种判定得比较准确 因为内存中的特征较多
文本型可能会被误判为数组或数值
传来参数如果实际为的数值类型 但其如果恰表示一个指针 则也容易被误判为其他类型

Global.取结构体尺寸()
注意结构中不能嵌套再其他结构或含有数组,同时不能含有字节型、短整数型、字节集型的成员,否则会出问题;并且也都不能直接传字节集。
因为E中自定义数据类型嵌套结构或数组使用的是指针,发布到坛论易精与C/C++中直接为数据体不同;并且E的自定义数据类型里小于4字节的成员会被扩展为4字节,以实现对齐
如果结构像平时那样直接声明为结构时,E会自动把结构转换为C/C++中的标准的那种,但结构写为通用型时E只简单传递结构指针不做转换

R_指针到数据_变量()
【本质是将源数据的值写入目标变量,源数据不是基本类型的时候就是传指针了(注意如果源数据与目标变量类型不能兼容的话,程序就会崩溃)[还可实现父类到子类向下转型等]】

【汇编】没有放在一个类中,因为这样会导致汇编代码操作的结果出错!
【常量】所有常量按照微软官方处理!保证了大家内存操作的需求!但是在调试属性返回这些常量时,最好去官方找解释!因为有一些解释十分繁琐。这里未能补全,否则严重影响阅读!

那么使用本模块可以有哪些作用?
你有想过把自定义的数据结构变量保存到硬盘吗?
你有想过给DLL传自定义的数据结构变量吗?
你想跳出现有的变量限定吗?..
你想跳出限定吗?
你想强制进行任意类型数据转换吗?
也许它能满足你的愿望!

句柄 = Heap堆.创建 (0, 1048576, 0) ' 创建一个初始为 1MB(1048576字节) 无限制自动增长的堆
ASD = “123456”
内存指针 = Heap堆.分配内存 (句柄, 10, 取字节集长度 (到字节集 (ASD))) ' 从堆分配出空间给 ASD 变量的数据
内操.写数据 (进程.取伪句柄 (), 内存指针, ASD, 取字节集长度 (到字节集 (ASD)), 0) ' 向内存写入 ASD 的数据
ASD = “ ” ' 相当于申请指定固定长度的内存空间用于接受数据,不同的是此变量由易语言管理,不用我们释放。
内操.读数据 (进程.取伪句柄 (), 内存指针, ASD, 取字节集长度 (到字节集 (ASD)), 0) ' 从内存读出 ASD 的数据
调试输出 (ASD) ' 返回结果为 123456 ‘即之前存到堆中的数据
' 做测试》》》测试本项目是否有效
调试输出 (Heap堆.取堆内存块信息 (句柄, 信息))
调试输出 (信息.子项目结构.C空间.dwReserved [3])
' 做测试》》》测试本项目是否有效
调试输出 (Heap堆.释放空间 (句柄, 0, 内存指针))
调试输出 (Heap堆.释放 (句柄))

通过汇编和API实现的内存操作模块自带例程

热门推荐

相关文章