0

I'm receiving following error:

Debug Assertion Failed!

Expression: string iterators incompatible

When trying to run such a code:

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

Does someone know why

BTW: I followed this.

4

2 回答 2

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());

string_Dir()话虽如此,您并没有从 ANSI 转换为 UTF-16,因此只有在返回std::string包含7 位ASCII 字符的 a 时,此代码才能正常工作。如果包含任何非 ASCII 8 位字符,它将失败。std::string

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

SetDllDirectoryA(string_Dir().c_str());
于 2015-04-30T21:34:36.960 回答
1

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

于 2015-04-30T20:40:01.720 回答