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

Expression: string iterators incompatiable, when calling "SetDllDirectory"

我收到以下错误:

Debug Assertion Failed!

Expression: string iterators incompatible

尝试运行这样的代码时:

std::string string_Dir(){return ".\Dir\";}
std::wstring wstring_Dir=std::wstring(
    string_Dir().begin()
    ,string_Dir().end()
    );
SetDllDirectory(wstring_Dir.c_str());

有人知道为什么吗

顺便说一句:我关注了 this

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

您正在调用 string_Dir() 两次,然后使用来自 不同 std::string 对象的迭代器来初始化您的 std::wstring。这就是您收到不兼容错误的原因。您必须使用来自 same std::string 对象的迭代器,因此调用 string_Dir() 一次并将 return 值分配给变量:

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() return 包含 [=28= 的 std::string,此代码才能正常工作]只有 7位ASCII字符。如果 std::string 包含任何非 ASCII 8 位字符,它将失败。

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

SetDllDirectoryA(string_Dir().c_str());