首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表达式:当调用"SetDllDirectory“时,字符串迭代器不兼容

表达式:当调用"SetDllDirectory“时,字符串迭代器不兼容
EN

Stack Overflow用户
提问于 2015-04-30 20:25:13
回答 2查看 160关注 0票数 0

我收到以下错误:

调试断言失败! 表达式:字符串迭代器不兼容

当试图运行这样的代码时:

代码语言:javascript
复制
std::string string_Dir(){return ".\\Dir\\";}
std::wstring wstring_Dir=std::wstring(
    string_Dir().begin()
    ,string_Dir().end()
    );
SetDllDirectory(wstring_Dir.c_str());

有人知道为什么

顺便说一句:我跟着

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-30 21:34:36

您正在两次调用string_Dir(),然后使用来自不同std::string对象的迭代器初始化std::wstring。这就是为什么您得到了一个不兼容错误。您必须使用来自同一个std::string对象的迭代器,因此只需调用string_Dir()一次,并将返回值赋值给一个变量:

代码语言:javascript
复制
std::string dir = string_Dir();
std::wstring wstring_Dir(dir.begin(), dir.end());
SetDllDirectory(wstring_Dir.c_str());
// or better: SetDllDirectoryW(wstring_Dir.c_str());

尽管如此,您并不是从ANSI转换为UTF-16,所以只有当string_Dir()返回只包含7位ASCII字符的std::string时,此代码才能正确工作。如果std::string包含任何非ASCII 8位字符,它将失败。

有一个更简单的解决方案--您可以调用SetDllDirectoryA()。您不需要std::wstring,并且操作系统可以为您完成ANSI到-UTF16 16的转换:

代码语言:javascript
复制
SetDllDirectoryA(string_Dir().c_str());
票数 2
EN

Stack Overflow用户

发布于 2015-04-30 20:40:01

根据文档,函数调用中的值应该是LPCTSTR而不是LPCTWSTR

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

https://stackoverflow.com/questions/29977160

复制
相关文章

相似问题

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