我正在尝试使用windows.h和wincrypt.h库构建一个简单的应用程序,以便加密一些字符串。
当我调用函数CryptProtectData(&input, NULL, NULL, NULL, NULL, 0, &output);
时,我得到错误:
error: undefined reference to `_imp__CryptProtectData@28'
我在网上搜索了很多,并没有多少出现。我也意识到Chromium浏览器使用与我类似的代码来加密和解密其登录,而我的做法并不一样。
我正在使用QtCreator IDE编译我的代码。
我的一些代码:
std::string plaintext="Some plain text";
DATA_BLOB input;
input.pbData = const_cast<BYTE*>(
reinterpret_cast<const BYTE*>(plaintext.data()));
input.cbData = static_cast<DWORD>(plaintext.length());
DATA_BLOB output;
BOOL result = CryptProtectData(&input, NULL, NULL, NULL, NULL,
0, &output);
编辑:忘了提到我已经包含了windows.h和wincrypt.h库。当然。
答案 0 :(得分:6)
这是由于您未提供CryptProtectData
函数所需的库文件而导致的链接器错误。您需要将Crypt32
库传递给链接器。
此信息包含在该功能的MSDN documentation中。向下滚动到主题的底部以查看信息。
作为一般规则,要使用API函数,您需要查看函数文档中的 Requirements 部分。这列出了以下信息:
答案 1 :(得分:3)
您是否已与Crypt32.dll
或Crypt32.lib
相关联?将.lib添加到依赖项中。遇到此类错误时,请始终查看documentation。