1

我将在 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功能。

4

2 回答 2

1

目前我“找到”了解决问题的方法。
bcrypt.h将 CNG 开发工具包中的文件复制到我的项目文件夹中,然后删除了GetHashInterface函数的定义。我的项目应该包含修改后的头文件,而不是原来的。
我不知道这是正确的方法,但它对我有用。

于 2016-04-09T06:39:26.990 回答
0

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

只需添加到此文件:

LIBRARY "yourlibraryname"

EXPORTS

  GetHashInterface = GetHashInterface
于 2016-06-01T14:24:53.473 回答