这是我的代码:
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;
}