C++ typedef FOO(BAR)中不允许函数返回函数
我有一个问题。实际上,我甚至不确定这个语法应该是什么意思:C++ typedef FOO(BAR)中不允许函数返回函数,c++,visual-studio-2012,typedef,C++,Visual Studio 2012,Typedef,我有一个问题。实际上,我甚至不确定这个语法应该是什么意思: typedef NTSTATUS( WINAPI* PNT_QUERY_SYSTEM_INFORMATION ) ( __in SYSTEM_INFORMATION_CLASS SystemInformationClass, __inout PVOID SystemInformation, __in ULONG SystemInformationLength, __out_o
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\u QUERY\u SYSTEM\u INFORMATION
标记为红色,并显示以下消息:错误:不允许使用函数返回函数
当我悬停在PNT\u QUERY\u SYSTEM\u INFORMATION
上时,我得到了这个信息(我必须在这里重写整个工具提示文本…):
所以
我遇到了完全相同的问题,对我来说,这是未找到的
NTSTATUS
的定义。这将导致
typedef NTSTATUS(WINAPI*PNT\u QUERY\u SYSTEM\u INFORMATION)
被解释为“函数返回函数”的typedef,即:
typedef func(\u stdcall PNT\u QUERY\u SYSTEM\u INFORMATION)(…)
而不是:
typedef LONG(\u stdcall PNT\u QUERY\u SYSTEM\u INFORMATION)(…)
因为NTSTATUS
实际上是LONG
的类型定义
我的解决方法是将函数返回类型从
NTSTATUS
替换为LONG
(但理想情况下,include应该是固定的,以便NTSTATUS
得到解决)。1)它是定义函数指针的类型定义。2) 实际的编译器错误是什么?没有尝试编译。我会尝试更新我的问题-谢谢你的建议!:)请看这个简单的例子:您的定义使用了更多的参数和返回类型,但归根结底是相同的。
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'