我打算在CNG(下一代加密)下编写一个简单的算法提供程序,完全是用户模式的哈希提供程序。
根据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
函数。
答案 0 :(得分:1)
此刻我“找到”了解决问题的方法
我将CNG开发工具包中的文件bcrypt.h
更改为我的项目文件夹,然后删除了GetHashInterface
函数的定义。我的项目应包括修改后的头文件,但不包括原始文件
我不知道这是一种正确的方式,但它对我有用。
答案 1 :(得分:0)
您可以使用.def文件而无需编辑bcrypt.h。在Visual Studio中:添加 - >新项目 - >代码 - >模块定义文件。
只需添加到此文件:
LIBRARY "yourlibraryname"
EXPORTS
GetHashInterface = GetHashInterface