Вы звоните 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
, который содержит только 7bit ASCII-символы. Он не сработает, если std::string
содержит любые 8-битные символы, отличные от ASCII.
Существует более простое решение - вместо этого вы можете позвонить SetDllDirectoryA()
. Вам не нужен std::wstring
, а операционная система может выполнять преобразование ANSI-к-UTF16 для вас:!
SetDllDirectoryA(string_Dir().c_str());
, потому что 'string' =' wstring', потому что '' char' = wchar_t'. –