gpt4 book ai didi

c++ - typedef FOO(BAR) 中不允许函数返回函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:23:48 26 4
gpt4 key购买 nike

我对 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'

所以...

  1. 这个语法是什么意思?像这样更通用的语法会做什么?
  2. 我可以解决这个问题吗? (我真的需要!)

最佳答案

我遇到了完全相同的问题,对我来说,这是找不到 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com