"PROCESSENTRY32W *" 类型的参数与 "LPPROCESSENTRY32" 类型的参数不兼容

argument of type "PROCESSENTRY32W *" is incompatible with parameter of type "LPPROCESSENTRY32"

这是我的代码:

std::uint32_t find(const wchar_t* proc)
{
    auto snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    auto pe = PROCESSENTRY32W{ sizeof(PROCESSENTRY32W) };

    if (Process32First(snapshot, &pe)) {
        do {
            if (!_wcsicmp(proc, pe.szExeFile)) {
                CloseHandle(snapshot);
                return pe.th32ProcessID;
            }
        } while (Process32Next(snapshot, &pe));
    }
    CloseHandle(snapshot);
    return 0;
}

我收到错误 "PROCESSENTRY32W *" 类型的参数与 "LPPROCESSENTRY32" 类型的参数不兼容。我的 Visual studio 设置设置为使用多字节字符集。如果我将它更改为 unicode,它只会破坏我的整个项目。这个错误是什么意思,我该如何修复我的代码?

您应该使用 PROCESSENTRY32 结构的多字节版本而不是宽字符:

std::uint32_t find(const char* proc)
{
    auto snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    auto pe = PROCESSENTRY32{ sizeof(PROCESSENTRY32) };

    if (Process32First(snapshot, &pe)) {
        do {
            if (!_stricmp(proc, pe.szExeFile)) {
                CloseHandle(snapshot);
                return pe.th32ProcessID;
            }
        } while (Process32Next(snapshot, &pe));
    }
    CloseHandle(snapshot);
    return 0;
}