urenai 发表于 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));// 这样才会正确的把嵌入的结构体输入复制到火山结构里。

完毕。


2oon 发表于 2022-7-14 07:53:06

看不懂感觉很牛逼

shuimiao 发表于 2022-7-14 08:27:18

如果这样的话,为啥老吴不把结构体指针弄的直接一点

Xelloss0618 发表于 2022-7-14 08:46:51

纠正一下,你取的是火山类成员变量的地址,并不是结构体的。
+24是32位火山基本类的头大小,64位又是另一个大小了。

这里先给一个结论,不能直接把火山类的成员变量当作结构体使用。
因为结构类成员变量和结构体的内存字节对齐可能会不一样,
就是具体的偏移地址会不同,直接用肯定会出错。

结构类只是在内部定义了一个名为 S 的真结构体,但这个结构体是不会自动创建的,所以你无法通过结构类的地址访问这个结构体。
你必须创建 S 结构体的变量,它才会分配到内存。
既然都用到嵌入式了,就直接用结构类的 SetStruct 和 GetStruct 吧。

urenai 发表于 2022-7-14 10:04:55

Xelloss0618 发表于 2022-7-14 08:46
纠正一下,你取的是火山类成员变量的地址,并不是结构体的。
+24是32位火山基本类的头大小,64位又是另一个 ...

对啊对啊,@创世魂 抽空把那些内部函数搞个笔记就好了, SetStruct 和 GetStruct 我还头一回见。

Xelloss0618 发表于 2022-7-14 10:20:03

urenai 发表于 2022-7-14 10:04
对啊对啊,@创世魂 抽空把那些内部函数搞个笔记就好了, SetStruct 和 GetStruct 我还头一回见。 ...

这些看封装手册,里面有写,结构类属性的备注里也有写

jiaozhu 发表于 2022-7-14 12:13:31

Xelloss0618 发表于 2022-7-14 10:20
这些看封装手册,里面有写,结构类属性的备注里也有写

老哥 能出个 怎么使用S 结构体的变量    SetStruct 和 GetStruct   就用这个@ RECT _rect; 矩形演示个例子吗 谢谢了

Xelloss0618 发表于 2022-7-14 12:38:10

jiaozhu 发表于 2022-7-14 12:13
老哥 能出个 怎么使用S 结构体的变量    SetStruct 和 GetStruct   就用这个@ RECT _rect; 矩形演示个 ...

@ RECT stRect;
// 下一句是将火山矩形类的成员变量赋值到结构体 stRect 里,这一步对 GetWindowRect 没有意义,仅做演示
@ @<矩形>.GetStruct ((@dt<矩形类>::S *)&stRect);
@ BOOL bRes = GetWindowRect ((HWND)@<窗口句柄>, &stRect);
// 将结构体 stRect 的数据赋值到火山结构类变量中
@ @<矩形>.SetStruct ((@dt<矩形类>::S *)&stRect);
@ return bRes;

tmf19901124 发表于 2022-7-14 12:45:21

不要用火山的结构类!不要用火山的结构类!不要用火山的结构类!重要的事情说三遍!

jiaozhu 发表于 2022-7-14 12:50:20

Xelloss0618 发表于 2022-7-14 12:38
@ RECT stRect;
// 下一句是将火山矩形类的成员变量赋值到结构体 stRect 里,这一步对 GetWindowRect 没有 ...

感谢老哥
页: [1] 2
查看完整版本: ★ 重要知识点记录,关于结构体。