您的位置:首页 > 其它

易语言 取自定义数据类型的大小

2014-06-02 12:24 288 查看
先说一下易语言的变量储存机制

易语言有基本数据类型和复合数据类型两种

基本数据类型包括:1. 各种整数 2.各种浮点 3. 逻辑值

他们都是储存在栈上的 大小都是固定的 用不着取

复合类型一般储存在堆上 然后在栈上储存堆上数据的引用

其中有几种比较特殊:字符串 字节集 数组

这两种类型的大小虽然储存在堆上的某个地方

但都有专门的取大小函数 直接调用即可

剩下就是自定义数据类型 比如类或者结构

特别是类 类的数据成员都是私有的

假如你想知道别人写的一个模块里一个类的大小

不可能通过数数据成员的方法得到

那如何取到呢?有人可能提出用“取变量地址”这个函数

可惜的是 “取变量地址”取到的永远是栈上的地址

根据上面所说 栈上地址的内容就是堆上地址

但是易语言没有一个用指针取整数的函数

这就需要用一个系统api:RtlMoveMemory

这个函数跟c语言memcpy的功能一样 但是有了他问题就变得容易的多

声明一个整形变量a  ls是一个自定义的类或者结构

RtlMoveMemory (取变量地址 (a), 取变量地址 (LS), 4)

这样a储存的就是ls在堆区的地址

之后用到一个api:LocalSize

我们都知道堆区内存分配必然用到LocalAlloc/GlobalAlloc

那么也能通过LocalSize取到大小

调试输出 (LocalSize (a))

之后这样输出的就是ls的大小

当然 相同的数据类型 大小肯定是不变的

每次需要的时候不用都取

取一次之后当常数用就好了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: