【发布时间】:2019-09-20 16:36:55
【问题描述】:
编译 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;
}
谁能帮我解决这些错误?
【问题讨论】:
-
1) 为什么是
std::unique_ptr<std::wstring>而不是std::wstring? 2) 错误有什么不清楚的地方?在CryptBinaryToString调用中pwszBuffer->data ()而不是pwszBuffer(注意,要使用它,你需要用C++-17 编译你的程序)?
标签: c++ c++11 compiler-errors