易语言中自定义数据类型在火山视窗中怎么实现?
本帖最后由 曼菲士 于 2022-9-21 17:03 编辑我想把易语言中一个DLL弄到火山视窗中,现在卡在结构数据上,取到的数据会偏移,让我百思不得其解,不知道是写法问题还是哪里除了问题?
程序运行后,通过查看变量地址,用CE打开相应区域确实看到了一致的数据,但是在取第一个数据AdapterInfo.Next时,却是从第13个位置开始,前面的12个是不是火山视窗的类特有的预留?
或者我是不是弄错了写法?
本帖最后由 曼菲士 于 2022-9-21 17:10 编辑
通过结构变量地址+12的办法确实得到了正确的数据,那前面12个应该是类的数据?
通过类定义的自定义数据类型来看,从内存中观察到前12个字节和尾部68个字节并非我们定义的变量区域,那是属于火山视窗的区域,所以在复制内存中结构数据时,前12个字节跳过就能正确复制进去了,总算找到原因了。
基类的变量,我一般是取变量地址(自定义数据类型.首个变量) 本帖最后由 server 于 2022-9-21 18:02 编辑
小蜗牛 发表于 2022-9-21 17:44
基类的变量,我一般是取变量地址(自定义数据类型.首个变量)
正解,我以前发帖说过这个事。
http://bbs.voldp.com/forum.php?mod=viewthread&tid=13667
http://bbs.voldp.com/forum.php?mod=viewthread&tid=14757
本帖最后由 曼菲士 于 2022-9-21 20:13 编辑
server 发表于 2022-9-21 17:59
正解,我以前发帖说过这个事。
http://bbs.voldp.com/forum.php?mod=viewthread&tid=13667
http://bbs.vol ...
谢谢分享,这问题不好搜索,找了好久都没点头绪:'(
刚发现,用结构的第一个变量地址也可以。
方法一:内存移动 (取变量地址 (AdapterInfo) + 12, pAda, nSize)
方法二:内存移动 (取变量地址 (AdapterInfo.Next), pAda, nSize)
个人觉得用结构体的第一个变量地址比较靠谱,不用去找前面有多少个字节需要跳过。
不要这么写吧,火山类的内存对齐可能跟结构体不一样,容易出错
用结构类自带的用法吧,定义真结构体 @dt<结构类>::S,和用 GetStruct、SetStruct 两个方法赋值。 对的,当前结构体有待优化。 Xelloss0618 发表于 2022-9-21 20:47
不要这么写吧,火山类的内存对齐可能跟结构体不一样,容易出错
用结构类自带的用法吧,定义真结构体 @dt::S ...
请问有例子吗?或者相关帖链接 曼菲士 发表于 2022-9-21 20:57
请问有例子吗?或者相关帖链接
把你的例子改一下
页:
[1]
2