我遇到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'
因此...
答案 0 :(得分:2)
我遇到了完全相同的问题,对我而言,找不到NTSTATUS
的定义。
这将导致typedef NTSTATUS( WINAPI* PNT_QUERY_SYSTEM_INFORMATION )
被解释为&#34;函数返回函数&#34;的typedef,即:
typedef func( __stdcall PNT_QUERY_SYSTEM_INFORMATION )(...)
而不是:
typedef LONG( __stdcall PNT_QUERY_SYSTEM_INFORMATION )(...)
因为NTSTATUS
实际上是LONG
的typedef。
我的解决方法是将函数返回类型从NTSTATUS
替换为LONG
(但理想情况下应该修复包含以便解析NTSTATUS
)。