表达式:调用 "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());
我收到以下错误:
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());