【发布时间】:2019-11-03 20:41:36
【问题描述】:
我需要将this 指针(64 位宽)打包到 4 个WORD 中,然后在代码的其他部分中我需要将这些单词提取(组装)回this指针。
代码如下所示:
std::vector<WORD> vec;
vec.push_back( this ); // how?
后面的代码;
pThis = vec.at(0); // how?
我确实看过 LOWORD/HIWORD 和 LOWBYTE/HIBYTE 宏,但我仍然不知道该怎么做。
如果你问到底为什么会有人需要这个,原因如下:
我需要填写DLGITEMTEMPLATEEX 结构的创建数据,它以WORD 作为最后一个参数来指定大小,后面的数据是你放置数据的地方,我的数据是this 指针,因为我正在处理单词(std::vector<WORD>) 填充结构,最后一个数据是4个WORDS(64位)代表指针!
欢迎任何建议或示例代码。
【问题讨论】:
-
memcpy(&vec[0], &this, sizeof(this));然后memcpy(pThis, &vec[0], sizeof(your_class*));。该链接仍然没有解释为什么要使用 4 WORDS(为什么是 4?)而不仅仅是指针。您可能只想使用struct my_struct { DLGITEMTEMPLATEEX template; your_class *pThis; },然后使用containerof(或只是投射指针)来获取pThis。 -
@KamilCuk 您在
pThis之前缺少&。 -
太好了,我试试这段代码,顺便说一句,
DLGITEMTEMPLATEEX是一个特殊的不存在的结构,我们需要将它填充到内存中。然后将指向内存的指针传递给期望DLGITEMTEMPLATE*结构的函数。我使用向量来避免C style -
对话框通常是从资源文件中创建的。在极少数情况下,您需要动态生成 对话框(为什么?),请查看this。在任何情况下,对话框和应用程序的其余部分之间的接口都是通过消息和控件 ID 进行的。所以没有必要在对话框项结构中附加任何东西,因为它没有用。
标签: c++