CNG (Cryptography Next Generation) の下で単純なアルゴリズム プロバイダーを作成します。まさにユーザー モードのハッシュ プロバイダーです。
CNG 開発キットのヘルプの指示によると、「ハッシュ プロバイダーはGetHashInterface
関数を実装し、名前でエクスポートする必要があります」。
アルゴリズム プロバイダーを実装するには、CNG 開発キットの "bcrypt.h" ファイルを含める必要があります。GetHashInterface
このファイルは、関数のインターフェイスも定義しますが、export
ディレクティブはありません。正確には次のとおりです。
__checkReturn
NTSTATUS
WINAPI
GetHashInterface(
__in LPCWSTR pszProviderName,
__in LPCWSTR pszAlgId,
__out BCRYPT_HASH_FUNCTION_TABLE **ppFunctionTable,
__in ULONG dwFlags);
たとえば、ヘッダー ファイル内の関数をエクスポート可能な関数として再定義するとします。
#ifndef __CngHashProvider
#define __CngHashProvider
///////////////////////////////////////////////////////////////
#ifndef EXPORT
#define EXPORT extern "C" __declspec(dllexport)
#endif
EXPORT NTSTATUS WINAPI GetHashInterface(
__in LPCWSTR pszProviderName,
__in LPCWSTR pszAlgId,
__out BCRYPT_HASH_FUNCTION_TABLE **ppFunctionTable,
__in ULONG dwFlags
);
////////////////////////////////////////////////////////////////
#endif __CngHashProvider
エラーメッセージが表示されるはずです:
エラー C2375 'GetHashInterface': 再定義。異なるリンケージ
EXPORT ディレクティブを削除すると (または関数のインターフェイス事前定義全体を削除すると)、エラー メッセージは表示されなくなりますが、DLL から関数をエクスポートできません。
ですから、必要な機能をエクスポートするために問題を解決する方法を教えてくださいGetHashInterface
。