Visual c++ 如何导出GetHashInterface函数?
我将在CNG(加密新一代)下编写一个简单的算法提供程序,这正是一个用户模式哈希提供程序。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开发工具包帮助中的说明,“哈希提供程序必须实现
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