簡體   English   中英

來自dll的C ++訪問沖突調用函數

[英]C++ Access violation calling function from dll

我正在開發一個使用標准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)是否相同?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM