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;
     }