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
映射到PROCESSENTRY32W
,Process32Next()
映射到Process32NextW()
。 因此,ProcEntry.szExeFile
字段是一个WCHAR[]
数组。
您正在将szExeFile
传递给strcmp()
,它不支持wchar_t*
字符串,仅支持char*
字符串。 您需要:
-
使用
WideCharToMultiByte()
将szExeFile
转换为char[]
数组,以便随后可以将其传递给strcmp()
。 -
将
ProcessName
参数更改为wchar_t*
,或使用MultiByteToWideChar()
将ProcessName
转换为wchar_t[]
数组,并将其传递给wcscmp()
或lstrcmpW()
而不是strcmp()
。 -
如果要继续使用基于
TCHAR
的 API,请将ProcessName
参数更改为LPTSTR
,然后使用_tcscmp()
或lstrcmp()
而不是strcmp()
。