WNetUseConnection SystemErrorCode 1113 Нет сопоставления существует - PullRequest
0 голосов
/ 16 февраля 2011

Я пытаюсь преобразовать строку в строку wchar_t, чтобы использовать ее в функции WNetUseConnection.В основном это имя unc, похожее на это "\\remoteserver".Я получаю код возврата 1113 , который описывается следующим образом:

В целевой многобайтовой кодовой странице нет сопоставления для символа Unicode.

Мой код выглядит следующим образом:

 std::string serverName = "\\uncDrive";
 wchar_t *remoteName = new wchar_t[ serverName.size() ];
 MultiByteToWideChar(CP_ACP, 0, serverName.c_str(), serverName.size(), remoteName, serverName.size()); //also doesn't work if CP_UTF8

 NETRESOURCE nr;
 memset( &nr, 0, sizeof( nr ));
 nr.dwType = RESOURCETYPE_DISK;
 nr.lpRemoteName = remoteName;

 wchar_t pswd[] = L"user"; //would have the same problem if converted and not set
 wchar_t usrnm[] = L"pwd"; //would have the same problem if converted and not set
 int ret = WNetUseConnection(NULL,  &nr, pswd, usrnm, 0, NULL, NULL, NULL);      
 std::cerr << ret << std::endl;

Интересно то, что если remoteName - это жесткий код, например:

char_t remoteName[] = L"\\\\uncName";

Все работает нормально.Но так как позже на сервере, user и pwd будут параметрами, которые я получу в виде строк, мне нужен способ их преобразования (также пробовал функцию mbstowcs с тем же результатом).

1 Ответ

1 голос
/ 16 февраля 2011

MultiByteToWideChar не будет 0-завершать преобразованную строку с вашим текущим кодом, и поэтому вы получите символы мусора после преобразованного "\ uncDrive"

Используйте это:

std::string serverName = "\\uncDrive";
int CharsNeeded = MultiByteToWideChar(CP_ACP, 0, serverName.c_str(), serverName.size() + 1, 0, 0);
wchar_t *remoteName = new wchar_t[ CharsNeeded ];
MultiByteToWideChar(CP_ACP, 0, serverName.c_str(), serverName.size() + 1, remoteName, CharsNeeded);

Это первоес помощью MultiByteToWideChar проверяет, сколько символов требуется для хранения указанной строки и 0-конца, затем выделяет строку и преобразует ее.Обратите внимание, что я не компилировал / тестировал этот код, остерегайтесь опечаток.

...