Delphi 为什么这个结构应该有48个字节

Delphi 为什么这个结构应该有48个字节,delphi,winapi,alignment,Delphi,Winapi,Alignment,我试图将winuser.h头的一些新部分翻译成Delphi。 为什么预期此结构为48字节?相应的函数只接受此大小。对于4字节边界,它看起来应该有40个字节 typedef struct tagGESTUREINFO { UINT cbSize; DWORD dwFlags; DWORD dwID; HWND hwndTarget

我试图将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字节边界有关?如果是,是否与乌龙龙出现的任何情况有关


谢谢,结构是48字节大,因为Windows API需要8字节对齐。这只是微软视窗采用的惯例;这是因为当前支持的最大整数类型是8字节,因此8字节对齐确保所有整数类型都正确对齐


请记住,诸如winuser.h之类的头文件指定了一个,但要使用该API实际使用已编译的库,您需要一个,其中包括调用约定和结构对齐等详细信息。

由于Windows API需要8字节对齐,因此结构大48字节。这只是微软视窗采用的惯例;这是因为当前支持的最大整数类型是8字节,因此8字节对齐确保所有整数类型都正确对齐


请记住,诸如winuser.h之类的头文件指定了,但要使用该API实际使用已编译的库,您需要一个,其中包括调用约定和结构对齐等详细信息。

是的,默认打包方式是8,它将ullArgument成员向上移动以使其正确对齐。这里有4个填充字节,用于从偏移量28到32获取它。并且在末尾添加4个填充字节,以确保结构数组仍然正确对齐该成员。

是的,默认打包为8,将ullArgument成员上移以使其正确对齐。这里有4个填充字节,用于从偏移量28到32获取它。并在末尾添加4个填充字节,以确保结构数组仍然正确对齐该成员。

注意,此类型已在Delphi 2010 Windows.pas中定义。

注意,此类型已在Delphi 2010 Windows.pas中定义。

是的,我知道,但我已设法为更早的版本执行此操作,我知道,但我设法为一个更早的版本做到了这一点