【问题标题】:'The argument of type WCHAR* is not compatible with "const char*"''WCHAR* 类型的参数与“const char*”不兼容'
【发布时间】:2015-12-14 21:19:19
【问题描述】:
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 上。

【问题讨论】:

    标签: c++ memory


    【解决方案1】:

    您的项目是在启用 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()

    【讨论】:

    • 还有一个我必须解决的问题。但不能通过使用 lstrcmp() 来修复。
    • @Leon:如果它与此问题中的代码有关,请编辑此问题以包含新代码。否则,请发布一个新问题。
    猜你喜欢
    • 2021-08-06
    • 2020-11-19
    • 1970-01-01
    • 2019-12-16
    • 2016-05-19
    • 2019-10-31
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多