我收到以下错误:
调试断言失败! 表达式:字符串迭代器不兼容
当试图运行这样的代码时:
std::string string_Dir(){return ".\\Dir\\";}
std::wstring wstring_Dir=std::wstring(
string_Dir().begin()
,string_Dir().end()
);
SetDllDirectory(wstring_Dir.c_str());有人知道为什么
顺便说一句:我跟着这。
发布于 2015-04-30 21:34:36
您正在两次调用string_Dir(),然后使用来自不同std::string对象的迭代器初始化std::wstring。这就是为什么您得到了一个不兼容错误。您必须使用来自同一个std::string对象的迭代器,因此只需调用string_Dir()一次,并将返回值赋值给一个变量:
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的转换:
SetDllDirectoryA(string_Dir().c_str());发布于 2015-04-30 20:40:01
根据文档,函数调用中的值应该是LPCTSTR而不是LPCTWSTR。
https://stackoverflow.com/questions/29977160
复制相似问题