使用DWORD64类型初始化struct成员

时间:2015-02-08 09:29:52

标签: c visual-studio struct 64-bit

我使用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成员。

0 个答案:

没有答案