2013-11-21 159 views
3

BOOL (WINAPI *ZTSQueryUserToken)(ULONG SessionId, PHANDLE phToken) = NULL;爲什麼用WINAPI這個C++語法是什麼意思?

對我來說,它看起來像一個結構或東西正在創建一個變量,但我從來沒有見過這種類型的語法,這樣能有人打破它給我嗎?

+5

這是一個函數指針與調用約定。查看螺旋規則。 – chris

+0

那麼你可以使用這個函數指針與任何具有這兩個參數的函數?我沒有看到WINAPI部分與此有關。 –

+3

這是調用約定__stdcall。 –

回答

12

WINAPI約定通常用於調用Win32 API函數。 WINAPI簡直是__stdcall

#define WINAPI __stdcall

__stdcall調用約定在一般以下特點:由右至左

  • 參數傳遞,並放置在堆棧中。
  • 堆棧的清除由調用函數執行。
  • 函數名稱具有下劃線字符和附加一個「@」字符和所需的堆棧空間的字節數。

所以留下__stdcall,使用"Spiral Rule"獲得

  +----------------------+ 
      | +----------------+ | 
      | |    | | 
      | ^    | | 
BOOL (WINAPI* ZTSQueryUserToken ) (ULONG SessionId, PHANDLE phToken) 
^  ^     | | 
|   +--------------------+ | 
+---------------------------------+ 

因此,標識符:

  • ZTSQueryUserToken
  • 指針(__stdcall)函數具有類型參數ULONGPHANDLE
  • 返回BOOL

而你的情況下,指針被分配到NULL

+2

多麼完美的迴應!在StackOverflow上已經有一段時間了,因爲我已經收到了這個答案。我真的非常感謝你。 –

+1

@BrianTHannan很高興它幫助:D – P0W

+2

這是真棒,簡短,並重點。 – Mehrdad