[英]argument of type "WCHAR" is incompatible with parameter of type "const char"
[英]Argument type “WCHAR *” is incompatible with parameter of type “const char *”
在下面的論壇中找到了這個有用的代碼,但它在這一行引發了錯誤
if (stricmp(entry.szExeFile, "target.exe") == 0)
說
參數類型“WCHAR *”與類型“const char *”的參數不兼容。
我正在使用 Visual Studio 2019。
#include <cstdio>
#include <windows.h>
#include <tlhelp32.h>
void EnableDebugPriv()
{
HANDLE hToken;
LUID luid;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = luid;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL);
CloseHandle(hToken);
}
int main(int, char* [])
{
EnableDebugPriv();
PROCESSENTRY32 entry;
entry.dwSize = sizeof(PROCESSENTRY32);
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(snapshot, &entry) == TRUE)
{
while (Process32Next(snapshot, &entry) == TRUE)
{
if (stricmp(entry.szExeFile, "target.exe") == 0)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
// Do stuff..
CloseHandle(hProcess);
}
}
}
CloseHandle(snapshot);
return 0;
}
您正在編譯項目,其字符集選項設置為 Unicode,因此Process32First()
和Process32Next()
map 到它們的WCHAR[]
版本,因此是entry.szExeFile
。
但是stricmp()
取而代之的是char
輸入,這就是代碼無法編譯的原因。
您需要改用 stricmp 的stricmp
版本,即wcsicmp()
或_wcsicmp()
,例如:
if (wcsicmp(entry.szExeFile, L"target.exe") == 0)
或者更好的是,在<tchar.h>
中使用_tcsicmp()
,因為您實際上使用的是Process32...
函數的TCHAR
版本,例如:
if (_tcsicmp(entry.szExeFile, _T("target.exe")) == 0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.