如何导出GetHashInterface函数?

时间:2016-04-07 08:30:28

标签: visual-c++ dll provider cng

我打算在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函数。

2 个答案:

答案 0 :(得分:1)

此刻我“找到”了解决问题的方法 我将CNG开发工具包中的文件bcrypt.h更改为我的项目文件夹,然后删除了GetHashInterface函数的定义。我的项目应包括修改后的头文件,但不包括原始文件 我不知道这是一种正确的方式,但它对我有用。

答案 1 :(得分:0)

您可以使用.def文件而无需编辑bcrypt.h。在Visual Studio中:添加 - >新项目 - >代码 - >模块定义文件。

只需添加到此文件:

LIBRARY "yourlibraryname"

EXPORTS

  GetHashInterface = GetHashInterface