gpt4 book ai didi

c++ - WNetUseConnection SystemErrorCode 1113 不存在映射

转载 作者:行者123 更新时间:2023-11-28 08:23:16 26 4
gpt4 key购买 nike

我正在尝试将字符串转换为 wchar_t 字符串,以便在 WNetUseConnection 函数中使用它。基本上它是一个 unc 名称,看起来像这样 "\\remoteserver"。我得到一个返回代码 1113,它被描述为:

No mapping for the Unicode character exists in the target multi-byte code page.

我的代码是这样的:

 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 函数,结果相同)。

最佳答案

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 终止符,然后分配字符串并转换它。请注意,我没有编译/测试此代码,请注意拼写错误。

关于c++ - WNetUseConnection SystemErrorCode 1113 不存在映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5015285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com