0

我需要使用标准 PKCS#11 连接到令牌。在我用 Visual Studio 编写的 C 程序中,我包含了从 RSA 站点下载的 PKCS#11 标头和一些宏。

//define macros
#define CK_PTR *
#define CK_DEFINE_FUNCTION(returnType, name) returnType name
#define CK_DECLARE_FUNCTION(returnType, name) returnType name
#define CK_DECLARE_FUNCTION_POINTER(returnType, name) returnType (* name)
#define CK_CALLBACK_FUNCTION(returnType, name) returnType (* name)
#ifndef NULL_PTR
#define NULL_PTR 0
#endif

#include "pkcs11.h"

int main(int argc, char * argv[]) {
[..]
   C_Initialize(NULL_PTR);
   [..]

当我构建它时,我得到“对 C_Initialize 的未定义引用”。我使用的所有 pkcs11 函数都出现相同的错误。在程序目录中还有其他 pkcs11 头文件。它有什么问题?

4

2 回答 2

0

对于静态链接,您需要有一个相应的 .lib 文件。如果您将应用程序与特定硬件设备的 SDK 链接,您就可以获得它。

通用方法是动态加载最终用户提供的 DLL。为此,您的代码需要使用 LoadLibrary() 和 GetProcAddress() Windows API 函数来获取库的每个函数的地址(是的,如果没有记忆,那里有 50 多个函数)。

于 2013-09-03T10:30:07.753 回答
0

您没有链接到C_Initialize定义该函数的任何目标文件或库。

于 2013-09-03T09:29:00.083 回答