错误C2440:“初始化”:无法从“TCHAR 260”转换为“std::basic_string、std::allocator>”
我犯了这个错误,被困在上面几个小时。
TCHAR szModName[MAX_PATH];
if (!GetModuleFileNameEx(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR))) // Get the full path to the module's file
continue;
wstring modName = szModName; <-------- this is what im having problem with
发布于 2018-03-30 18:52:34
TCHAR
被定义为char
或wchar_t
,这取决于您是否定义了UNICODE
宏。在您的示例中,它看起来是没有定义的,因此您正在尝试从一个std::wstring
数组构造一个char[]
。
我建议您始终在Windows上使用宽API,因为这是在Windows上获得适当Unicode支持的唯一方法:
wchar_t szModName[MAX_PATH];
if (!GetModuleFileNameExW(hProcess, hMods[i], szModName, MAX_PATH))
continue;
wstring modName = szModName;
GetModuleFileNameEx
不是一个函数,而是一个扩展到GetModuleFileNameExA
或GetModuleFileNameExW
的宏,这取决于UNICODE
宏。
最初,提供TCHAR
变体是为了方便从没有Unicode支持的旧版本过渡到具有Unicode支持的新的基于NT的Windows版本。现在,根本没有理由使用ANSI变体。
https://stackoverflow.com/questions/49579510
复制相似问题