表达式:字符串迭代器不兼容,在调用" SetDllDirectory"

时间:2015-04-30 20:25:14

标签: c++ wstring lpcwstr setdlldirectory

我收到以下错误:

  

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

2 个答案:

答案 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