c++ - 错误 C2664 'BOOL CryptBinaryToStringW(const BYTE *,DWORD,DWORD,LPWSTR,DWORD *)':无法将参数 4 从 'std::unique_ptr' 转换为 'LPWSTR'
问题描述
编译 C++ 项目时出现以下错误。
错误 C2664 'BOOL CryptBinaryToStringW(const BYTE *,DWORD,DWORD,LPWSTR,DWORD *)':无法将参数 4 从 'std::unique_ptr>' 转换为 'LPWSTR'
在下面的代码行:
CryptBinaryToString(reinterpret_cast<const BYTE*>(strData.c_str()), dwSize,
dwOptions, pwszBuffer, &dwLength);
而且我收到以下错误:
错误 C2679 二进制“=”:未找到采用“std::unique_ptr>”类型右侧操作数的运算符(或没有可接受的转换)
在下面一行:
sBase64 = pwszBuffer;
下面是完整的代码:
bool EMRReader::EncodeBase64(DWORD dwSize, const std::string& strData, wstring& sBase64)
{
DWORD dwOptions = CRYPT_STRING_BASE64 | CRYPT_STRING_NOCRLF;
DWORD dwLength = 0;
BOOL bRet = CryptBinaryToString(reinterpret_cast<const BYTE*>(strData.c_str()), dwSize,
dwOptions, 0, &dwLength);
if (!bRet)
return bRet;
std::unique_ptr<std::wstring> pwszBuffer = std::make_unique<std::wstring>(dwLength + 1);
if (!pwszBuffer)
return FALSE;
SecureZeroMemory(pwszBuffer.get(), (dwLength + 1) * sizeof(wchar_t));
CryptBinaryToString(reinterpret_cast<const BYTE*>(strData.c_str()), dwSize,
dwOptions, pwszBuffer, &dwLength);
sBase64 = pwszBuffer;
return TRUE;
}
谁能帮我解决这些错误?
解决方案
您正在将一个对象分配给一个不允许的类型变量。如果要将 的值分配给类型的变量,则应获取的值,然后将其分配给变量。std::unique_ptr
<wstring>
wstring
pwszBuffer
wstring
unique_ptr
你可以std::unique_ptr
通过调用它的*
操作符来获取它的值:
sBase64 = *pwszBuffer;
编辑:如果要将 a 传递std::unique_ptr
给函数,有两种方法:
- 通过引用传递它:
void func(std::unique_ptr<std::wstring>& input_ptr) {
// Do something...
}
然后简单地使用它:
std::unique_ptr<std::wstring> function_input;
func(function_input);
或者2.如果要按值传递,移动它:
void func(std::unique_ptr<std::wstring>&
input_ptr) {
// Do something...
}
然后通过它std::move
:
std::unique_ptr<std::wstring> function_input;
func(std::move(function_input));
您应该知道,在这种情况下,在移动 之后function_input
,它什么都不拥有并持有 anullptr
并且您不应该在func
.
推荐阅读
- google-chrome-extension - Youtube 广告,书签视频 ID 和标题
- jq - 在没有选定数据的情况下以指示的格式获取输出
- python - 获取熊猫列的相对值
- mongodb - MongoDB Atlas:集群已暂停且身份验证失败
- weblogic - 在 weblogic wlst 中, cmo.set() 与 set()
- python - python - 如何在没有列表切片的情况下按n个元素对python中的元素进行分组?
- autodesk - 是否可以使用空格而不是下划线从 Civil3d 中提取元数据?
- r - 如何编辑R中的重复记录?
- oauth-2.0 - 如何从 OAuth2 服务获取用户信息
- python-3.x - 如何在 ffpyplayer 中使用 tempfile