【发布时间】:2011-02-15 19:25:15
【问题描述】:
有没有办法在 Visual C++ 中克隆具有不同成员对齐方式的现有结构?
这是背景:
我使用一个 3rd-party 库,它定义了几个结构。为了填充结构,我将结构实例的地址传递给一些函数。不幸的是,函数只返回未对齐的缓冲区,因此某些成员的数据总是错误的。
/Zp 是无法选择的,因为它破坏了程序的其他部分。我知道#pragma pack 修改了以下定义的结构的对齐方式,但我宁愿避免将结构复制到我的代码中,因为库中的定义将来可能会发生变化。
示例代码:
图书馆.h:
结构 am_aligned { 字节数据1[10]; 超长数据2; }; 结构不变 { 字节数据1[9]; 整数数据2; };test.cpp:
#include "库.h" // typedef alignment(1) struct am_aligned am_unaligned; int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { 字符缓冲区[20] = {}; for (int i = 0; iam_unaligned是我的自定义声明,只在test.cpp有效。注释行当然不起作用。 untouched 应该仍然具有默认对齐方式。
instance.data2 是 0x0f0e0d0c,而 0x0d0c0b0a 是需要的。
感谢您的帮助!
【问题讨论】:
-
可能解决这个问题的唯一方法是为这个类编写我自己的反序列化代码,并在将来更改类时进行更新。