我对 piece of code from SuperUser 有疑问.我什至不确定该语法的含义:
typedef NTSTATUS( WINAPI* PNT_QUERY_SYSTEM_INFORMATION ) (
__in SYSTEM_INFORMATION_CLASS SystemInformationClass,
__inout PVOID SystemInformation,
__in ULONG SystemInformationLength,
__out_opt PULONG ReturnLength
);
通常,它是 typedef oldtype newtype
。在上面的语法中,我看不到 newtype
。 IDE 将 PNT_QUERY_SYSTEM_INFORMATION
标记为红色并显示以下消息:错误:不允许函数返回函数。。
当我将鼠标悬停在 PNT_QUERY_SYSTEM_INFORMATION
上时,我得到了这个(我不得不在这里重写整个工具提示文本...):
typedef <error-type> (__stdcall *PNT_QUERY_SYSTEM_INFORMATION)(SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength)
如果我尝试编译,这是关于这一行的错误(这会导致其他地方出现很多其他错误):
1>...\nostealfocus\nostealfocus\nostealfocus.cpp(6): error C2059: syntax error : '__stdcall'
所以...
- 这个语法是什么意思?像这样更通用的语法会做什么?
- 我可以解决这个问题吗? (我真的需要!)
最佳答案
我遇到了完全相同的问题,对我来说,这是找不到 NTSTATUS
的定义。
这将导致 typedef NTSTATUS( WINAPI* PNT_QUERY_SYSTEM_INFORMATION )
被解释为“函数返回函数”的 typedef,即:
typedef func( __stdcall PNT_QUERY_SYSTEM_INFORMATION )(...)
而不是:
typedef LONG( __stdcall PNT_QUERY_SYSTEM_INFORMATION )(...)
因为 NTSTATUS
实际上是 LONG
的类型定义。
我的解决方法是将函数返回类型从 NTSTATUS
替换为 LONG
(但理想情况下应该修复包含,以便解析 NTSTATUS
) .
关于c++ - typedef FOO(BAR) 中不允许函数返回函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28859456/