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

Mak*_*see 1 delphi winapi alignment

我试图将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;
Run Code Online (Sandbox Code Playgroud)

如果它与8字节边界有关?如果是这样,任何ULONGLONG出现结构的情况都是如此?

谢谢

Jos*_*ley 11

该结构大48字节,因为Windows API需要8字节对齐.这只是Microsoft Windows采用的惯例; MSDN说这是因为当前支持的最大整数类型是8字节大,所以8字节对齐确保所有整数类型都正确对齐.

(请记住,头文件,如WINUSER.H指定的API,但使用该API,你需要一个实际使用的已编译的库ABI,其中包括像调用约定和结构对齐的详细资料.)