Modify existing struct alignment in Visual C++
- by Crend King
Is there a way to modify the member alignment of an existing struct in Visual C++?
Here is the background:
I use an 3rd-party library, which uses several structs. To fill up the structs, I pass the address of the struct instance to some functions. Unfortunately, the functions only returns unaligned buffer, so that data of some members are always wrong.
/Zp is out of choice, since it breaks the other parts of the program. I know #pragma pack modifies the alignment of the following struct, but I do not want to copy the structs into my code, for the definitions in the library might change in the future.
Sample code:
test.h:
struct am_aligned
{
BYTE data1[10];
ULONG data2;
};
test.cpp:
include "test.h"
// typedef alignment(1) struct am_aligned am_unaligned
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
char buffer[20] = {};
for (int i = 0; i < sizeof(unaligned_struct); i++)
{
buffer[i] = i;
}
am_aligned instance = *(am_aligned*) buffer;
return 0;
}
instance.data2 is 0x0f0e0d0c, while 0x0d0c0b0a is desired. The commented line does not work of course.
Thanks for help!