易语言吧 关注:266,633贴子:1,665,317
  • 2回复贴,共1

localsize()获取到的自定义大小不同

只看楼主收藏回复

1. 这个运行结果

2.下面是代码
.版本 2
.DLL命令 LocalSize, 整数型, "kernel32", "LocalSize", , 取数据占用长度
.参数 hMem, 整数型
.DLL命令 LocalSize1, 整数型, "kernel32", "LocalSize", , 取数据占用长度
.参数 hMem, 自定义类型
.版本 2
.数据类型 自定义类型, 公开
.成员 dzx, 短整数型, , , 2
.成员 zx, 整数型, , , 4
.成员 lj, 逻辑型, , , 4
.成员 rqsj, 日期时间型, , , 8
.成员 czx, 长整数型, , , 8
.成员 xs, 小数型, , , 4
.成员 sjd, 双精度小数型, , , 8
.成员 wb, 文本型, , , 4
.成员 zjj, 字节集, , , 4
.成员 zj, 字节型, , , 1
.版本 2
.支持库 spec
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
.局部变量 zdy, 自定义类型
调试输出 (“zdy”, LocalSize1 (zdy))
调试输出 (“zdy”, LocalSize (指针到整数 (取变量数据地址 (zdy))))
调试输出 (“zdy”, LocalSize (指针到整数 (取变量地址 (zdy))))


IP属地:重庆1楼2025-03-06 12:37回复
    按理说52是正确的,但也只是理论,结构体的内存分配需要字节对齐,第一个成员2字节,第二个成员4字节那么分配内存时会实际第一个成员也会占4字节,最后一个1字节也会按4字节分配,但易语言这个结构体是大坑,很多时候调用api还要手动给结构体做字节对齐操作,比如成员为数组类型戓其他结构体类型时,它这个成员只有4字节指针并不会展开。这样取变量地址来传就是直接是错的,调用api时参数必须声明相同的结构体类型它内部才会做一些转换工作,但也并不代表它转换出来是正确的


    IP属地:广西来自iPhone客户端2楼2025-03-06 14:00
    回复


      IP属地:山东来自Android客户端3楼2025-03-16 07:09
      回复