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



我收到以下错误:

调试断言失败!

表达式:字符串迭代器不兼容

尝试运行此类代码时:

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

有人知道为什么吗

顺便说一句:我遵循了这个。

您调用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());

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

最新更新