我试图将winuser.h标题的一些新部分翻译成Delphi。 为什么这个结构应该是48个字节(只有这个大小被相应的函数接受)。使用4字节边界,它看起来应该有40个字节。
typedef struct tagGESTUREINFO {
UINT cbSize;
DWORD dwFlags;
DWORD dwID;
HWND hwndTarget;
POINTS ptsLocation;
DWORD dwInstanceID;
DWORD dwSequenceID;
ULONGLONG ullArguments;
UINT cbExtraArgs;
} GESTUREINFO, *PGESTUREINFO;
如果它与8字节边界有关?如果是,那么它与ULONGLONG出现结构的任何情况有关吗?
由于
答案 0 :(得分:11)
结构大48字节,因为Windows API需要8字节对齐。这只是Microsoft Windows采用的惯例; MSDN says因为当前支持的最大整数类型是8字节大,所以8字节对齐确保所有整数类型都正确对齐。
(请记住,诸如winuser.h之类的头文件指定了API,但要使用该API实际使用已编译的库,您需要ABI,其中包含调用等详细信息约定和结构对齐。)
答案 1 :(得分:4)
是的,它是8的默认包装,它将ullArgument成员向上移动以使其正确对齐。有4个填充字节可以从偏移量28到32获得它。最后有4个填充字节,以确保结构数组仍然可以正确对齐该成员。
答案 2 :(得分:3)
请注意,此类型已在Delphi 2010 Windows.pas中定义。