对_imp__CryptProtectData @ 28的未定义引用

时间:2013-03-25 11:51:44

标签: c++ windows qt encryption

我正在尝试使用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库。当然。

2 个答案:

答案 0 :(得分:6)

这是由于您未提供CryptProtectData函数所需的库文件而导致的链接器错误。您需要将Crypt32库传递给链接器。

此信息包含在该功能的MSDN documentation中。向下滚动到主题的底部以查看信息。

作为一般规则,要使用API​​函数,您需要查看函数文档中的 Requirements 部分。这列出了以下信息:

  • 支持的最低Windows版本。
  • 您需要包含的头文件。
  • 您需要传递给链接器的库文件。

答案 1 :(得分:3)

您是否已与Crypt32.dllCrypt32.lib相关联?将.lib添加到依赖项中。遇到此类错误时,请始终查看documentation