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


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 Invalidn";
return 0;
 }

WCHAR* 类型的参数与 "const char*"' 不兼容。同时将光标放在mEntry上。

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

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

  1. 使用 WideCharToMultiByte()szExeFile转换为char[]数组,以便随后可以将其传递给 strcmp()

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

  3. 如果要继续使用基于 TCHAR 的 API,请将 ProcessName 参数更改为 LPTSTR,然后使用 _tcscmp()lstrcmp() 而不是 strcmp()

最新更新