Warm tip: This article is reproduced from serverfault.com, please click

c++-“类型为WCHAR *的参数与“ const char *”不兼容”

(c++ - 'The argument of type WCHAR* is not compatible with "const char*"')

发布于 2015-12-14 21:19:19
DWORD ProcMem::Module(LPSTR ModuleName){


HANDLE hModule = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
MODULEENTRY32 mEntry;
mEntry.dwSize = sizeof(mEntry); 

do
    if (!strcmp(mEntry.szModule, ModuleName))
    {
    CloseHandle(hModule);
    return (DWORD)mEntry.modBaseAddr;
    }
while (Module32Next(hModule, &mEntry));

cout << "\nMODULE: Process Platform Invalid\n";
return 0;
 }

WCHAR *类型的参数与“ const char *”`不兼容。同时将光标停留在mEntry上。

Questioner
Leon
Viewed
0
Remy Lebeau 2015-12-15 05:28:52

你的项目在启用Unicode的情况下进行了编译,因此CreateToolhelp32Snapshot()映射到CreateToolhelp32SnapshotW()PROCESSENTRY32映射到PROCESSENTRY32WProcess32Next()映射到Process32NextW()因此,ProcEntry.szExeFile字段是一个WCHAR[]数组。

你正在传递szExeFilestrcmp(),它不支持wchar_t*字符串,仅支持char*字符串。你需要:

  1. 用于WideCharToMultiByte()转换szExeFilechar[]数组,以便随后将其传递给strcmp()

  2. ProcessName参数更改wchar_t*,或使用MultiByteToWideChar()转换ProcessNamewchar_t[]数组,然后将其传递给wcscmp()lstrcmpW()而不是strcmp()

  3. 如果你想继续使用TCHAR基于API的API,请将你的ProcessName参数更改LPTSTR,然后使用_tcscmp()lstrcmp()代替strcmp()