我使用Microsoft Visual Studio 2010,用C ++编写并为x64平台编译二进制文件。在我的项目中,我对具有数据指针和大小的内存块有了有用的结构:
typedef struct _MEMORY_BLOCK
{
DWORD64 Length;
LPBYTE lpData;
}
MEMORY_BLOCK, *LPMEMORY_BLOCK;
在其他文件中我有关键定义:
BYTE PublicKey[] = { 0x01, 0x02, 0x03, ... };
DWORD64 PublicKeyLength = (DWORD64)sizeof(PublicKey);
MEMORY_BLOCK ServerKey = { PublicKeyLength, PublicKey };
在x86平台结构上,ServerKey的初始化工作正常,但在x64平台上,它导致MEMORY_BLOCK结构填充为零。如果我在结构中改变成员顺序(例如,首先是lpData,第二个是Length),lpData正确初始化,但是Length仍然等于零。
现在我有一个在运行时设置ServerKey值的函数的解决方法,但我需要知道为什么我无法在ServerKey定义中初始化DWORD64 struct成员。