首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从“TCHAR[260]”转换为“std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>”

无法从“TCHAR[260]”转换为“std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>”
EN

Stack Overflow用户
提问于 2018-03-30 18:27:19
回答 1查看 2K关注 0票数 0

错误C2440:“初始化”:无法从“TCHAR 260”转换为“std::basic_string、std::allocator>”

我犯了这个错误,被困在上面几个小时。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2018-03-30 18:52:34

TCHAR被定义为charwchar_t,这取决于您是否定义了UNICODE宏。在您的示例中,它看起来是没有定义的,因此您正在尝试从一个std::wstring数组构造一个char[]

我建议您始终在Windows上使用宽API,因为这是在Windows上获得适当Unicode支持的唯一方法:

代码语言:javascript
运行
复制
wchar_t szModName[MAX_PATH];
if (!GetModuleFileNameExW(hProcess, hMods[i], szModName, MAX_PATH))
    continue;

wstring modName = szModName;

GetModuleFileNameEx不是一个函数,而是一个扩展到GetModuleFileNameExAGetModuleFileNameExW的宏,这取决于UNICODE宏。

最初,提供TCHAR变体是为了方便从没有Unicode支持的旧版本过渡到具有Unicode支持的新的基于NT的Windows版本。现在,根本没有理由使用ANSI变体。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49579510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档