我正在尝试将字符串转换为 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 函数)。