Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 如何导出GetHashInterface函数?_Visual C++_Dll_Provider_Cng - Fatal编程技术网

Visual c++ 如何导出GetHashInterface函数?

Visual c++ 如何导出GetHashInterface函数?,visual-c++,dll,provider,cng,Visual C++,Dll,Provider,Cng,我将在CNG(加密新一代)下编写一个简单的算法提供程序,这正是一个用户模式哈希提供程序。 根据CNG开发工具包帮助中的说明,“哈希提供程序必须实现GetHashInterface函数并按名称导出它”。 为了实现算法提供者,我需要包含CNG开发工具包中的“bcrypt.h”文件。此文件还定义了GetHashInterface函数的接口,但没有export指令,确切地说: __checkReturn NTSTATUS WINAPI GetHashInterface( __in LPCW

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

此时我“找到”了解决问题的方法。
我将CNG开发工具包中的文件
bcrypt.h
复制到我的项目文件夹中,然后删除了
GetHashInterface
函数的定义。我的项目应该包括修改后的头文件,但不包括原始头文件。

我不知道这是不是一种正确的方法,但它对我很有效。

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

只需将以下内容添加到此文件:

LIBRARY "yourlibraryname"

EXPORTS

  GetHashInterface = GetHashInterface