【发布时间】:2020-09-08 07:22:13
【问题描述】:
我需要帮助:Visual Studio 2019 说它Cannot convert Argument 1 from WCHAR to const char *
uintptr_t GetModuleBaseAddress(const char* modName) {
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);
if (hSnap != INVALID_HANDLE_VALUE) {
MODULEENTRY32 modEntry;
modEntry.dwSize = sizeof(modEntry);
if (Module32First(hSnap, &modEntry)) {
do {
if (!strcmp(modEntry.szModule, modName)) {
CloseHandle(hSnap);
return (uintptr_t)modEntry.modBaseAddr;
}
} while (Module32Next(hSnap, &modEntry));
}
}
这是什么意思?代码有明显错误吗?
【问题讨论】:
-
哪一行出现此错误?
-
如果你处理的是
wchar_t*,你应该使用std::wcscmp -
我觉得你问这个问题很好,而不是用演员来消除警告的做法,许多新程序员后来才发现它要么崩溃要么不起作用。
-
您似乎正在使用为项目选择的“使用 UNICODE 字符集”选项编译文件:这会将
MODULEENTRY32类型重新定义为MODULEENTRY32W结构,其中@ 987654328@ 成员是一个WCHAR数组。您是否可以将项目设置切换为“使用多字节字符集”?如果没有,您将不得不处理您的代码,以便您的函数的参数也是WCHAR字符串,或者提供代码来转换它,因为您无法(直接)比较char*字符串和 @ 987654332@字符串。 -
@CoryKramer 但是
modName也需要是wchar_t*字符串。