使用MASM寫Windows程序,其實就是和Windows API打交道,而一個人是不可能記住所有的API用法的,所以API參考手冊是必不可少的,API的參考手冊中函數原型是按匈牙利表示法表示的,下面這個表就是API原型中那些前綴的詳細解釋,希望對初學者有幫助。
資料來源:MicroSoft MSDN Platform SDK 參考
a Array 數組
b BOOL (int) 布爾(整數)
by Unsigned Char (Byte) 無符號字符(字節)
c Char 字符(字節)
cb Count of bytes 字節數
cr Color reference value 顏色(參考)值
cx Count of x (Short) x的集合(短整數)
dw DWORD (unsigned long) 雙字(無符號長整數)
f Flags (usually multiple bit values) 標志(一般是有多位的數值)
fn Function 函數
g_ global 全局的
h Handle 句柄
i Integer 整數
l Long 長整數
lp Long pointer 長指針
m_ Data member of a class 一個類的數據成員
n Short int 短整數
p Pointer 指針
s String 字符串
sz Zero terminated String 以0結尾的字符串
tm Text metric 文本規則
u Unsigned int 無符號整數
ul Unsigned long (ULONG) 無符號長整數
w WORD (unsigned short) 無符號短整數
x,y x, y coordinates (short) 坐標值/短整數
v void 空
比如說API函數CreateWindowsEx,API原型如下:
HWND CreateWindowEx(
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // pointer to registered class name
LPCTSTR lpWindowName, // pointer to window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // handle to menu, or child-window identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // pointer to window-creation data
);
那麼根據上述前綴表可以得出,dwExStyle需要一個雙字值,lpClassName與lpWindowName需要一個指向字符串的長指針(在MASM中則是偏移地址),x、y表示需傳遞整數值,nWidth與nHeight表示傳遞短整數,hWndParent表示需要一個窗口句柄,hMenu表示傳遞一個菜單句柄,hInstance表示傳遞的是程序實例句柄,lpParam表示可以傳遞長指針(地址)。
注意看前綴時請不要看前面的類型說明符,而是要看詞的前綴,如DWORD dwExStyle,只需要看dwExStyle就知道傳遞的是雙字數。
另外還有其它的組合,只要稍注意就能行,比如說lpfn表示指向函數的長指針,在MASM中則是一個函數的地址,,還有像lpSecurityAttributes之類的,則是指向SECURITY_ATTRIBUTES結構的長指針(地址),lpvBuffer表示傳遞一個緩存(Buffer)長指針(lp)或者為空(void),還有一些沒有前綴的則是這個詞已經足夠說明它的意思了。等等,熟悉這些前綴的含義可以讓你在學習API的時候進行快速的掌握。並能排除一些錯誤。