我正在尝试将字符串转换为wchar_t字符串,以便在WNetUseConnection函数中使用它。
基本上它的名字看起来像"\\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";
一切正常。但是后来在服务器上,用户和pwd将是我作为字符串得到的参数,我需要一种方法来转换它们(也尝试了mbstowcs函数具有相同的结果)。
答案 0 :(得分:1)
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-termination,然后分配字符串并转换它。请注意,我没有编译/测试此代码,请注意拼写错误。