Как экспортировать функцию 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