火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 3379|回复: 16
打印 上一主题 下一主题

[视窗] ★ 重要知识点记录,关于结构体。

[复制链接]

307

主题

1382

帖子

5315

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5315
QQ
跳转到指定楼层
楼主
发表于 2022-7-13 19:37:38 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
有些人吐槽结构体的一些问题。连memcpy都不行。
那是错误的。是不对的。
在实际运用当中,我发现结构体是不能直接运用结构体指针的。
因为结构体指针!=结构体起始成员内存地址指针。
意思是,结构体指针+24(好像是)才=第一个成员的指针。
那我们在实际运用中,可以在嵌入代码中,
先声明目的 类型变量 例如:@ RECT _rect;

在调用 @ bool _bool =(bool)GetWindowRect((HWND)@<句柄>,&_rect);//这是一句非常正常的嵌入代码。
下一步就是将_rect里面的矩形参数成员拷贝出来。

如果直接调用 @ memcpy(&@<矩形>,&_rect,sizeof(_rect));// 这样肯定是不对的。因为  矩形这个结构没有被正确引用。
正确的引用方法应该是@ memcpy(&@<矩形.左边>,&_rect,sizeof(_rect));// 这样才会正确的把嵌入的结构体输入复制到火山结构里。

完毕。


专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

6

主题

64

帖子

2243

积分

金牌会员

Rank: 6Rank: 6

积分
2243
17#
发表于 2022-7-17 21:12:28 | 只看该作者
Xelloss0618 发表于 2022-7-14 08:46
纠正一下,你取的是火山类成员变量的地址,并不是结构体的。
+24是32位火山基本类的头大小,64位又是另一个 ...

纠正纠正一下(笑)并补充一点细节,火山基本类,即 CVolObject,定义在 vol_object.h 头文件中。这个类有一个虚函数表指针、一个 UINT_P 成员变量、一个 INT_P 成员变量,三者大小都是 32 位下占4字节,64 位下占8字节,所以这个类在32位下是12字节,64位下才是24字节。
火山PC交流群: 748413192
回复

使用道具 举报

307

主题

1382

帖子

5315

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
5315
QQ
16#
 楼主| 发表于 2022-7-14 21:36:10 | 只看该作者
tmf19901124 发表于 2022-7-14 19:31
嵌入c++结构体+火山的属性读写,缺点就是封装慢,优点是使用舒服,彻底解决内存对齐,各种嵌套,各种数组 ...

哦哦哦,我草,对啊,嵌套的用memcpy没有啊,没法对齐啊、
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

7

主题

241

帖子

1903

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1903
15#
发表于 2022-7-14 19:31:20 | 只看该作者
jiaozhu 发表于 2022-7-14 16:22
如果说不用自带的结构体,那么上面那个要怎么解决这个最简单的 rect 结构体的问题呢,不管怎么内嵌,最终还 ...

嵌入c++结构体+火山的属性读写,缺点就是封装慢,优点是使用舒服,彻底解决内存对齐,各种嵌套,各种数组问题。

**图片_20220714192859.png (32.75 KB, 下载次数: 10)

**图片_20220714192859.png
回复

使用道具 举报

10

主题

169

帖子

1382

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1382
14#
发表于 2022-7-14 16:22:43 | 只看该作者
tmf19901124 发表于 2022-7-14 14:35
没人听不要紧,踩坑了就知道老司机的忠告了。。。。。。。。。。。。

如果说不用自带的结构体,那么上面那个要怎么解决这个最简单的 rect 结构体的问题呢,不管怎么内嵌,最终还是要传到火山本地变量上啊,本地变量又只能用结构体,哥们有什么好的方式能推荐吗,
回复

使用道具 举报

7

主题

241

帖子

1903

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1903
13#
发表于 2022-7-14 14:35:21 | 只看该作者
hcwanz 发表于 2022-7-14 12:55
建议再说三十遍,或者说点实际的,不然未必有人听

没人听不要紧,踩坑了就知道老司机的忠告了。。。。。。。。。。。。
回复

使用道具 举报

439

主题

1万

帖子

3万

积分

超级版主

Rank: 8Rank: 8

积分
36487
12#
发表于 2022-7-14 13:13:29 | 只看该作者
urenai 发表于 2022-7-14 10:04
对啊对啊,@创世魂 抽空把那些内部函数搞个笔记就好了, SetStruct 和 GetStruct 我还头一回见。 ...

这个太高级了。。要后面有空专门来弄。现在主要弄基础手册
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

54

主题

756

帖子

3512

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3512
11#
发表于 2022-7-14 12:55:43 | 只看该作者
tmf19901124 发表于 2022-7-14 12:45
不要用火山的结构类!不要用火山的结构类!不要用火山的结构类!重要的事情说三遍! ...

建议再说三十遍,或者说点实际的,不然未必有人听
回复

使用道具 举报

10

主题

169

帖子

1382

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1382
10#
发表于 2022-7-14 12:50:20 | 只看该作者
Xelloss0618 发表于 2022-7-14 12:38
@ RECT stRect;
// 下一句是将火山矩形类的成员变量赋值到结构体 stRect 里,这一步对 GetWindowRect 没有 ...

感谢老哥
回复

使用道具 举报

7

主题

241

帖子

1903

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1903
9#
发表于 2022-7-14 12:45:21 | 只看该作者
不要用火山的结构类!不要用火山的结构类!不要用火山的结构类!重要的事情说三遍!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-5-7 20:03 , Processed in 0.103147 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表