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

时间:2018-01-19 03:12:06

标签: c++ winapi visual-studio-2015

这是我的代码:

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,它只会破坏我的整个项目。这个错误意味着什么,我该如何修复我的代码?

1 个答案:

答案 0 :(得分:2)

< p>您应该使用多字节版本的< code> PROCESSENTRY32< / code>结构而不是宽字符:< / p> < pre>< code> std :: uint32_t find(const char * proc) {     auto snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);     auto pe = PROCESSENTRY32 {sizeof(PROCESSENTRY32)};     if(Process32First(snapshot,& pe)){         做{             if(!_stricmp(proc,pe.szExeFile)){                 CloseHandle的(快照);                 return pe.th32ProcessID;             }         } while(Process32Next(snapshot,& pe));     }     CloseHandle的(快照);     返回0; } < /代码>< /预>