gpt4 book ai didi

C++访问冲突从dll调用函数

转载 作者:太空狗 更新时间:2023-10-29 23:18:53 27 4
gpt4 key购买 nike

我正在开发一个应用程序,它将使用标准 PKCS#11 访问智能卡。目前,该应用程序在 Ubuntu 和 OS X 上都运行良好。现在我将它移植到 Windows,但每当我从运行时链接的 pkcs#11 库调用函数时,我都会收到“访问冲突”异常.

下面我尝试重现我的代码的 SSCCE(异常发生的地方用注释标识)。

void * libraryHandle = NULL;
CK_RV rv;
CK_C_GetFunctionList pC_GetFunctionList;
CK_FUNCTION_LIST_PTR functions;


libraryHandle = LoadLibrary(L"C:\\WINDOWS\\system32\\pteidpkcs11.dll");
if (libraryHandle == NULL)
{
printf("Library not loaded\n");
exit(1);
}

pC_GetFunctionList = (CK_C_GetFunctionList) GetProcAddress((HMODULE)libraryHandle, "C_GetFunctionList");

if (pC_GetFunctionList == NULL)
{
printf("Function not loaded\n");
FreeLibrary((HMODULE)libraryHandle);
exit(1);
}

rv = (*pC_GetFunctionList) (&functions);
assert(rv == CKR_OK);
printf("Point A\n");

if(functions == NULL)
{
printf("Functions not loaded\n");
FreeLibrary((HMODULE)libraryHandle);
exit(1);
}

printf("%u - %u\n",functions->version.major, functions->version.minor); // Prints without problems
rv = (*functions->C_Initialize) (NULL_PTR); //THIS IS THE PLACE WHERE I AM GETTING THE ACCESS VIOLATION
assert(rv == CKR_OK);

//printf("Point B\n");

FreeLibrary((HMODULE)libraryHandle);

当我调试应用程序时,“CK_FUNCTION_LIST_PTR 函数”结构似乎是有效的。

有谁知道是什么导致了这个异常?

我使用的是 Visual Studio 2010 Ultimate 和 Windows XP SP3。

谢谢!

(PS:我已经尝试使用库中的“GetProcAddress”加载函数“C_Initialize”,并且成功了)

--- 编辑

CK_FUNCTION_LIST 定义

struct CK_FUNCTION_LIST {

CK_VERSION version; /* Cryptoki version */

/* Pile all the function pointers into the CK_FUNCTION_LIST. */
/* pkcs11f.h has all the information about the Cryptoki
* function prototypes. */
#include "pkcs11f.h"

};

完整标题位于: http://www.rsa.com/rsalabs/node.asp?id=2133

最佳答案

从该图像来看,您似乎对可执行文件和 DLL 之间的 CK_FUNCTION_LIST_PTR 结构的布局存在某种分歧。确保可执行文件和 DLL 都是使用相同的编译器设置等编译的。

CK_FUNCTION_LIST_PTR 的定义(包括任何周围的编译指示/宏)是什么?如果您从可执行文件和 DLL 内部(例如,C_GetFunctionList())打印出它的值,sizeof(CK_FUNCTION_LIST_PTR) 是否相同?

关于C++访问冲突从dll调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11993429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com