2013-11-21 133 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