未定义的引用_imp__CryptProtectData @ 28

我正在尝试使用windows.h和wincrypt.h库来构build一个简单的应用程序,以便对一些string进行encryption

当我调用函数CryptProtectData(&input, NULL, NULL, NULL, NULL, 0, &output); 我得到错误:

 error: undefined reference to `_imp__CryptProtectData@28' 

我已经search了很多网站,并没有太多了。 我也意识到,Chromium浏览器使用类似的代码作为我的encryption和解密login,我没有做不同的事情。

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

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

此信息包含在该函数的MSDN文档中。 向下滚动到主题的底部以查看信息。

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

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

你链接到Crypt32.dll或更确切地说Crypt32.lib ? 将.lib添加到您的依赖关系。 有这样的错误时总是看到文档 。