'WCHAR* 类型的参数与“const char*”不兼容'

Leo*_*on 3 c++ memory

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;
 }
Run Code Online (Sandbox Code Playgroud)

WCHAR* 类型的参数与“const char*”不兼容。将光标放在 mEntry 上。

Rem*_*eau 5

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

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

  1. 使用WideCharToMultiByte()转换szExeFilechar[]数组,以便您可以将其传递给strcmp().

  2. 将参数更改ProcessNamewchar_t*, 或 useMultiByteToWideChar()转换ProcessNamewchar_t[]数组,并将其传递给wcscmp()lstrcmpW()而不是strcmp()

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