с++ Аргумент типа "const wchar_t"* несовместим с параметром типа "wchar_t"
не могу вызвать "GetProcessByExeName"
DWORD GetProcessByExeName(wchar_t* ExeName)
{
PROCESSENTRY32W pe32;
pe32.dwSize = sizeof(PROCESSENTRY32W);
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
MessageBoxW(NULL, L"Error CreateToolhelp32Snapshot", L"error", MB_OK);
return false;
}
if (Process32FirstW(hProcessSnap, &pe32))
{
do
{
if (_wcsicmp(pe32.szExeFile, ExeName) == 0)
{
CloseHandle(hProcessSnap);
return pe32.th32ProcessID;
}
} while (Process32NextW(hProcessSnap, &pe32));
}
CloseHandle(hProcessSnap);
return 0;
}
Вызывая так GetProcessByExeName(L"chrome.exe"); пишет -> Аргумент типа "const wchar_t"* несовместим с параметром типа "wchar_t"
Ответы (2 шт):
Автор решения: danrom11
→ Ссылка
DWORD GetProcessByExeName(const wchar_t* ExeName)
{
PROCESSENTRY32W pe32;
pe32.dwSize = sizeof(PROCESSENTRY32W);
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
MessageBoxW(NULL, L"Error CreateToolhelp32Snapshot", L"error", MB_OK);
return false;
}
if (Process32FirstW(hProcessSnap, &pe32))
{
do
{
if (_wcsicmp(pe32.szExeFile, ExeName) == 0)
{
CloseHandle(hProcessSnap);
return pe32.th32ProcessID;
}
} while (Process32NextW(hProcessSnap, &pe32));
}
CloseHandle(hProcessSnap);
return 0;
}
Автор решения: AndryS1
→ Ссылка
Решение 1: записать значение в переменную, а потом вызвать функцию
wchar_t* str = new wchar_t[] {L"chrome.exe"};
GetProcessByExeName(str);
Решение 2: добавить const в прототипе функций, что скажет компилятору: "Эта функция не меняет значения по передаваемому указателю"
DWORD GetProcessByExeName(const wchar_t* ExeName)
{
PROCESSENTRY32W pe32;
pe32.dwSize = sizeof(PROCESSENTRY32W);
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
MessageBoxW(NULL, L"Error CreateToolhelp32Snapshot", L"error", MB_OK);
return false;
}
if (Process32FirstW(hProcessSnap, &pe32))
{
do
{
if (_wcsicmp(pe32.szExeFile, ExeName) == 0)
{
CloseHandle(hProcessSnap);
return pe32.th32ProcessID;
}
} while (Process32NextW(hProcessSnap, &pe32));
}
CloseHandle(hProcessSnap);
return 0;
}
Вызывать в таком случае, как вы хотели раньше