我收到以下错误:
Debug Assertion失败!
表达式:字符串迭代器不兼容
尝试运行此类代码时:
std::string string_Dir(){return ".\\Dir\\";}
std::wstring wstring_Dir=std::wstring(
string_Dir().begin()
,string_Dir().end()
);
SetDllDirectory(wstring_Dir.c_str());
有人知道原因吗
顺便说一句:我跟着this。
答案 0 :(得分:4)
您正在调用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的转换:
SetDllDirectoryA(string_Dir().c_str());
答案 1 :(得分:1)
根据documentation,函数调用中的值应该是LPCTSTR
而不是LPCTWSTR
。