2010-06-18 95 views
1

我試着將一些新的winuser.h頭文件轉換成Delphi。 爲什麼這個結構預計是48個字節(只有這個大小被相應的函數接受)。使用4字節的邊界,它看起來應該有40個字節。爲什麼這個結構應該有48個字節

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出現結構的情況有關?

謝謝

回答

11

由於Windows API需要8字節對齊,所以結構爲48字節大。這只是Microsoft Windows採用的慣例; MSDN says這是因爲當前支持的最大整數類型是8個字節大,所以8字節對齊確保所有整數類型都正確對齊。

(請記住,頭文件,如WINUSER.H指定API,但使用該API實際使用已經編譯庫,你需要一個ABI,其中包括像調用約定和結構對齊的詳細資料。)

4

是的,它是8的默認包裝,它將ullArgument成員向上移動以使其正確對齊。有4個填充字節可以從偏移量28到32獲得它。並且在結尾處有4個填充字節,以確保結構數組仍然具有正確對齊的成員。

3

請注意,此類型在Delphi 2010 Windows.pas中已經定義。

+0

是的,我知道,但我設法爲更早的版本做到這一點 – Maksee 2010-06-18 20:34:00

相關問題