Я получаю следующую ошибку:
Ошибка отладки!
Выражение: несовместимые строковые итераторы
При попытке запустить такой код:
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()
возвращает std::string
который содержит только 7-битные символы ASCII. Это не удастся, если std::string
содержит любые не-ASCII 8-битные символы.
Есть более простое решение — вы можете позвонить SetDllDirectoryA()
вместо. Вам не нужно std::wstring
и ОС может выполнить для вас преобразование ANSI в UTF16:
SetDllDirectoryA(string_Dir().c_str());
Согласно документация, значение в вызове функции должно быть LPCTSTR
вместо LPCTWSTR
,