Выражение: строковые итераторы несовместимы при вызове & quot; SetDllDirectory & quot;

Я получаю следующую ошибку:

Ошибка отладки!

Выражение: несовместимые строковые итераторы

При попытке запустить такой код:

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

Кто-то знает почему

Кстати, я следовал этот.

0

Решение

Ты звонишь 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());
4

Другие решения

Согласно документация, значение в вызове функции должно быть LPCTSTR вместо LPCTWSTR,

1

По вопросам рекламы [email protected]