C++ ';WCHAR*类型的参数与“不兼容”;常量字符*”'; DWORD ProcMem::Module(LPSTR ModuleName){ HANDLE hModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPID); 模块TRY32-mEntry; mEntry.dwSize=sizeof(mEntry); 做 if(!strcmp(mEntry.szModule,ModuleName)) { 闭合手柄(hModule); return(DWORD)mEntry.modBaseAddr; } while(Module32Next(hModule,&mEntry)); 您的项目是使用启用Unicode编译的,因此CreateToolhelp32Snapshot()映射到CreateToolhelp32SnapshotW(),PROCESSENTRY32映射到PROCESSENTRY32W,而Process32Next()映射到Process32NextW()。因此,ProcEntry.szExeFile字段是一个WCHAR[]array
您正在将C++ ';WCHAR*类型的参数与“不兼容”;常量字符*”'; DWORD ProcMem::Module(LPSTR ModuleName){ HANDLE hModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPID); 模块TRY32-mEntry; mEntry.dwSize=sizeof(mEntry); 做 if(!strcmp(mEntry.szModule,ModuleName)) { 闭合手柄(hModule); return(DWORD)mEntry.modBaseAddr; } while(Module32Next(hModule,&mEntry)); 您的项目是使用启用Unicode编译的,因此CreateToolhelp32Snapshot()映射到CreateToolhelp32SnapshotW(),PROCESSENTRY32映射到PROCESSENTRY32W,而Process32Next()映射到Process32NextW()。因此,ProcEntry.szExeFile字段是一个WCHAR[]array,c++,memory,C++,Memory,您正在将szExeFile传递到strcmp(),它不支持wchar\u t*字符串,只支持char*字符串。您需要: 使用WideCharToMultiByte()将szExeFile转换为char[]数组,然后可以将其传递给strcmp() 将ProcessName参数更改为wchar\u t*,或使用MultiByteToWideChar()将ProcessName转换为wchar\u t[]数组,并将其传递给wcscmp()或lstrcmpW(),而不是strcmp() 如果要继续使用基
szExeFile
传递到strcmp()
,它不支持wchar\u t*
字符串,只支持char*
字符串。您需要:
WideCharToMultiByte()
将szExeFile
转换为char[]
数组,然后可以将其传递给strcmp()
ProcessName
参数更改为wchar\u t*
,或使用MultiByteToWideChar()
将ProcessName
转换为wchar\u t[]
数组,并将其传递给wcscmp()
或lstrcmpW()
,而不是strcmp()
TCHAR
的API,请将ProcessName
参数更改为LPTSTR
,然后使用\u tcscmp()
或lstrcmp()
而不是strcmp()
还有一个问题我必须解决。但是无法通过使用lstrcmp()解决。@Leon:如果它与此问题中的代码相关,请编辑此问题以包含新代码。否则,请发布新问题。
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;
}