C++ 错误:“QueryFullProcessImageNameA”未在此范围内声明

Posted

技术标签:

【中文标题】C++ 错误:“QueryFullProcessImageNameA”未在此范围内声明【英文标题】:C++ error: 'QueryFullProcessImageNameA' was not declared in this scope 【发布时间】:2021-07-08 08:05:44 【问题描述】:

我有这个功能,并且我有#include'd必要的文件,但我仍然收到这个错误。

操作系统:Windows 10

编译器:MinGW

string ProcessIdToName(DWORD processId)

    string ret;
    HANDLE handle = OpenProcess(
        PROCESS_QUERY_LIMITED_INFORMATION,
        FALSE,
        processId 
    );
    if (handle)
    
        DWORD buffSize = 1024;
        CHAR buffer[1024];
        if (QueryFullProcessImageNameA(handle, 0, buffer, &buffSize))
        
            ret = buffer;
        
        else
        
            printf("Error GetModuleBaseNameA : %lu", GetLastError());
        
        CloseHandle(handle);
    
    else
    
        printf("Error OpenProcess : %lu", GetLastError());
    
    return ret;

【问题讨论】:

使用 QueryFullProcessImageName? [SO]: How to create a Minimal, Reproducible Example (reprex (mcve)). @CristiFati 与 QueryFullProcessImageName 相同的错误。 当你在header B中包含header A,同时在header A中包含header B时,通常会发生此错误。你是这样做的吗? Using the Windows Headers。我感觉更合适的解决方案是停止使用 MinGW。它有所有错误的默认值,你迫不及待地不想再使用了。比如... ANSI 编码。 Ming 因使用过时的 Windows SDK 而臭名昭著。它的标题可能根本不知道QueryFullProcessImageName()。如果是这样,您可能必须在运行时使用 GetProcAddress() 手动导入函数。 【参考方案1】:

确保在包含标题之前将宏 _WIN32_WINNT 定义为大于或等于 0x0501:

#define _WIN32_WINNT 0x0501
#include <Windows.h>
#include <Psapi.h>

【讨论】:

OP 正在尝试使用QueryFullProcessImageName(),而不是GetProcessImageFileName()

以上是关于C++ 错误:“QueryFullProcessImageNameA”未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章

C++ 调用 C++ 库函数但执行了错误的函数

C++ 代码 SQLSTATE 中的错误:24000,本机错误:0

C++:奇怪的分段错误

c++向量分配错误分段错误

C++ (macOS) 的编译错误

使用 COM 接口 C# 从 c++ 访问会产生错误