Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ typedef FOO(BAR)中不允许函数返回函数_C++_Visual Studio 2012_Typedef - Fatal编程技术网

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'