为什么这个带有WINAPI的c ++语法是什么意思?

Bri*_*nan 3 c++ syntax winapi

BOOL (WINAPI *ZTSQueryUserToken)(ULONG SessionId, PHANDLE phToken) = NULL;

对我而言,它看起来像是为结构或其他东西创建的变量,但我从未见过这种类型的语法,所以有人可以为我分解它吗?

P0W*_*P0W 12

WINAPI约定通常用于调用Win32 API函数.WINAPI很简单__stdcall

#define WINAPI __stdcall

__stdcall调用约定具有以下的一般特征:

  • 从右到左传递参数,并放在堆栈上.
  • Stack的清理由调用函数执行.
  • 函数名称具有下划线字符,并附加"@"字符和所需堆栈空间的字节数.

所以留下来__stdcall,使用"螺旋规则"得到

            +----------------------+
            |   +----------------+ |
            |   |                | |
            |   ^                | |
BOOL (WINAPI* ZTSQueryUserToken  ) ( ULONG SessionId, PHANDLE phToken) 
 ^          ^                    | |
 |          +--------------------+ |
 +---------------------------------+   
Run Code Online (Sandbox Code Playgroud)

因此,标识符:

  • ZTSQueryUserToken 是一个
  • 指向__stdcall具有类型ULONG和参数的()函数的指针PHANDLE
  • 回国 BOOL

NULL在你的情况下指针被指定.

  • 真是太棒了!StackOverflow已经有一段时间了,因为我已经收到了这样的答案.我真的非常感谢你. (2认同)
  • 这很棒,很短,而且非常重要. (2认同)