2012-08-16 10 views
3

표준 PKCS # 11을 사용하여 스마트 카드에 액세스 할 응용 프로그램을 개발 중입니다. 현재이 애플리케이션은 Ubuntu와 OS X 모두에서 잘 작동하고 있습니다. 이제는 Windows로 이식 할 예정이지만 런타임에 링크 된 pkcs # 11 라이브러리에서 함수를 호출 할 때마다 "액세스 위반"예외가 발생합니다 .DLL에서 C++ 액세스 위반 함수 호출

다음은 내 코드의 SSCCE를 재현하려고 시도한 것입니다 (예외가 발생한 위치는 주석으로 식별됩니다).

응용 프로그램을 디버깅 할 때 "CK_FUNCTION_LIST_PTR functions"구조가 유효합니다.

이 예외의 원인을 아는 사람이 있습니까?

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

+0

'functions-> C_Initialize' (즉, 함수 주소)의 값은 무엇입니까? NULL 또는 다른 잘못된 값입니까? –

+0

이 이미지를 확인하십시오 https://www.dropbox.com/s/ix5itwskakd0sku/exec.JPG 감사합니다 –

답변

0

, 당신이 disagreeme의 일종이 하나처럼 보인다 실행 파일과 DLL 사이에 CK_FUNCTION_LIST_PTR 구조의 레이아웃에 대한 설명이 없습니다. 실행 파일과 DLL이 모두 동일한 컴파일러 설정 등으로 컴파일되었는지 확인하십시오.

의 정의 (주변의 pragma/매크로 포함)는 무엇입니까? sizeof(CK_FUNCTION_LIST_PTR)은 실행 파일과 DLL 내부에서 그 값을 출력하는 경우 동일합니다 (예 : C_GetFunctionList())?

+0

나는 dll을 만들지 않았습니다 ... 어떤 컴파일러와 정의가 사용되었는지 얻을 수 있습니까? 다른 헤더를 사용하려고합니다. –

+0

헤더 파일은 어떻게 생겼습니까? –

+0

무엇을 의미합니까? –