2016-04-07 6 views
1

私はCNG(Cryptography Next Generation)の下で、ユーザモードのハッシュプロバイダとまったく同じアルゴリズムプロバイダを作成します。
CNG Development Kitヘルプの指示に従って、「ハッシュプロバイダはGetHashInterface関数を実装し、名前でエクスポートする必要があります」。
アルゴリズムプロバイダを実装するには、CNG開発キットの "bcrypt.h"ファイルを含める必要があります。このファイルには、正確に、GetHashInterface機能のためではなく、exportディレクティブなしのインタフェースを定義します。GetHashInterface機能をエクスポートするには?

__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関数をエクスポートする方法を教えてください。
よろしくお願いいたします。

答えて

1

現時点で私は問題を解決する方法を見つけました。
CNG開発キットのbcrypt.hファイルを私のプロジェクトフォルダに貼り付けて、GetHashInterface関数の定義を削除しました。私のプロジェクトには、変更されたヘッダーファイルが含まれている必要があります。
私はそれが正しい方法であるかわかりませんが、それは私のために働く。

0

bcrypt.hを編集することなく.defファイルを使用できます。 Visual Studioの場合:Add-> New item-> Code-> Module-definitionファイル。

ただ、このファイルに追加します。

LIBRARY "yourlibraryname" 

EXPORTS 

    GetHashInterface = GetHashInterface 
関連する問題