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

先说一下易语言的变量储存机制

易语言有基本数据类型和复合数据类型两种
基本数据类型包括:1. 各种整数 2.各种浮点 3. 逻辑值
他们都是储存在栈上的 大小都是固定的 用不着取

复合类型一般储存在堆上 然后在栈上储存堆上数据的引用
其中有几种比较特殊:字符串 字节集 数组
这两种类型的大小虽然储存在堆上的某个地方
但都有专门的取大小函数 直接调用即可

剩下就是自定义数据类型 比如类或者结构
特别是类 类的数据成员都是私有的
假如你想知道别人写的一个模块里一个类的大小
不可能通过数数据成员的方法得到
那如何取到呢?有人可能提出用“取变量地址”这个函数
可惜的是 “取变量地址”取到的永远是栈上的地址

根据上面所说 栈上地址的内容就是堆上地址
但是易语言没有一个用指针取整数的函数
这就需要用一个系统api:RtlMoveMemory
这个函数跟c语言memcpy的功能一样 但是有了他问题就变得容易的多
声明一个整形变量a  ls是一个自定义的类或者结构
RtlMoveMemory (取变量地址 (a), 取变量地址 (LS), 4)
这样a储存的就是ls在堆区的地址

之后用到一个api:LocalSize
我们都知道堆区内存分配必然用到LocalAlloc/GlobalAlloc
那么也能通过LocalSize取到大小
调试输出 (LocalSize (a))
之后这样输出的就是ls的大小

当然 相同的数据类型 大小肯定是不变的
每次需要的时候不用都取
取一次之后当常数用就好了
易语言是一种高级事件驱动编程语言,易语言DLL是利用易语言编写的动态链接库文件。在DLL中,返回自定义数据类型源码步骤如下: 步骤1:定义自己的数据类型。首先,我们需要定义一个自定义数据类型,就像在普通的程序中定义一个结构体一样。在易语言中,可以使用自定义类型(Type)关键字来定义自己的数据类型。 例如: Type PERSON Name As String ' 名字 Age As Integer ' 年龄 End Type 这里定义了一个名为PERSON的自定义数据类型,由名字和年龄两个字段组成。 步骤2:创建函数并设置返回类型。接下来,我们需要创建函数并设置返回值类型为自定义数据类型。可以使用函数(Function)关键字来定义函数,使用As类型关键字来设置返回类型。 例如: Function GetPerson() As PERSON ' 这里编写获数据的代码,例如: Dim p As PERSON p.Name = "张三" p.Age = 18 GetPerson = p ' 返回PERSON类型的数据 End Function 这里创建了一个名为GetPerson的函数,用于获PERSON类型的数据,并将其返回。在函数内部,我们可以使用DIM语句创建PERSON类型的变量,并设置其属性值,最后返回该变量。 步骤3:调用函数。最后,在主程序中使用DLL中的函数来获自定义类型的数据。可以使用CallDLL函数(或者使用Declare关键字)来调用DLL函数。 例如: PersonData = CallDLL("MyDLL.dll", "GetPerson", "", DLL_RETURN_TYPE_CUSTOM, DLL_CALL_CDECL) 这里使用CallDLL函数调用MyDLL.dll中的GetPerson函数,获PERSON类型的数据,并将其存储在PersonData中。注意,这里需要指定返回类型为自定义类型(DLL_RETURN_TYPE_CUSTOM),并指定调用约定为CDECL(DLL_CALL_CDECL)。 这就是在易语言DLL中返回自定义数据类型源码的步骤。需要注意的是,在实际使用中应该根据具体情况进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值