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上。
你的项目在启用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的API,请将你的ProcessName
参数更改为LPTSTR
,然后使用_tcscmp()
或lstrcmp()
代替strcmp()
。
仍然有另一个问题,我必须解决。但是无法使用lstrcmp()进行修复。
@Leon:如果与该问题中的代码有关,请编辑此问题以包括新代码。否则,请发布一个新问题。