1

いくつかの文字列を暗号化するために、windows.hおよびwincrypt.hライブラリを使用して単純なアプリケーションを構築しようとしています。

関数を呼び出すと、CryptProtectData(&input, NULL, NULL, NULL, NULL, 0, &output);エラーとして表示されます。

error: undefined reference to `_imp__CryptProtectData@28'

私はウェブをたくさん検索しましたが、あまり出てきませんでした。また、Chromiumブラウザーは、ログインを暗号化および復号化するために私のものと同様のコードを使用していることに気付きました。私は別のことをしていません。

QtCreatorIDEを使用してコードをコンパイルしています。

私のコードのいくつか:

  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ライブラリを含めたことに言及するのを忘れました。

4

2 に答える 2

6

これは、関数に必要なライブラリファイルを指定していないために発生したリンカエラーですCryptProtectDataCrypt32ライブラリをリンカに渡す必要があります。

この情報は、関数のMSDNドキュメントに含まれています。トピックの一番下までスクロールして、情報を確認します。

原則として、API関数を使用するには、関数のドキュメントの「要件」セクションを確認する必要があります。次の情報が一覧表示されます。

  • サポートされているWindowsの最小バージョン。
  • インクルードする必要のあるヘッダーファイル。
  • リンカに渡す必要のあるライブラリファイル。
于 2013-03-25T11:53:42.777 に答える
3

Crypt32.dllリンクしましたか、それともリンクしましたかCrypt32.lib?依存関係に.libを追加します。このようなエラーが発生した場合は、常にドキュメントを参照してください。

于 2013-03-25T11:54:13.847 に答える