Как экспортировать функцию GetHashInterface?

Я собираюсь написать простой поставщик алгоритмов под CNG (Cryptography Next Generation), точно хэш-провайдер в пользовательском режиме.
В соответствии с инструкцией в справке CNG Development Kit "провайдер хеша должен реализовать GetHashInterface функция и экспортировать его по имени ".
Чтобы реализовать поставщика алгоритмов, мне нужно включить файл "bcrypt.h" из комплекта разработки CNG. Этот файл также определяет интерфейс для 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 функция.

2 ответа

На данный момент я "нашел" способ решения проблемы.
Я скопировал файл bcrypt.h из комплекта разработки CNG в папку моего проекта, а затем удалил определение GetHashInterface функция. Мой проект должен включать измененный заголовочный файл, но не оригинальный.
Я не знаю, это правильный путь, но это работает для меня.

Вы можете использовать файл.def без необходимости редактировать bcrypt.h. В Visual Studio: Добавить-> Новый элемент-> Код-> Файл определения модуля.

Просто добавьте в этот файл:

LIBRARY "yourlibraryname"

EXPORTS

  GetHashInterface = GetHashInterface
Другие вопросы по тегам