2014-09-01 11 views
0

C#에서 winscard.dll 메서드를 호출 중이며 모든 것이 디버그 모드에서 정상적으로 작동하고 있습니다. 내가 무엇입니까 문제SCardEstablishContext가 해제 모드에서 컨텍스트 포인터를 설정하지 않습니다.

릴리스 모드에서 컨텍스트를 설정하는 내 호출입니다 나는 이것을 pntContext 변수가 디버그 모드에서 제대로 설정 얻을 나타납니다 호출 할 때 내 테스트 응용 프로그램에서

[DllImport("winscard.dll")] 
public static extern int SCardEstablishContext(int dwScope, int pvReserved1, int pvReserved2, ref int phContext); 

입니다. 그러나 릴리스 모드에서는 설정되지 않습니다. 그러나 이상하게도 반환 코드는 여전히 0 (성공)입니다.

그래서이 문제를 일으킬 수있는 상황이 무엇인지, 또는 내가 뭘 잘못하고있을 수 있는지 궁금 할뿐입니다.

P. 또한 컴파일 플랫폼이 모든 CPU로 설정되어 있는지 확인해야합니다. 나는 변화하는 플랫폼으로 노력하고 있었고 플랫폼과 릴리스 모드로 x86을 사용하게되면 효과가 있습니다. 그런 괴상한 행동 때문에 디버그 모드에서 작동하는 이유는 무엇입니까?

+0

현재 어떤 OS를 사용하고 있습니까? 나는이 API를 win7과 win8에 anyCpu 컴파일과 함께 사용했고, 나는 당신이 겪고있는 문제를 발견하지 못했다. 어쨌든 나는이 구문을 IntPtr = Marshal.AllocHGlobal으로 희미한 hContext (Marshal.SizeOf (mContext)) mLastError = SCardEstablishContext (Scope.User, IntPtr.Zero, IntPtr.Zero, hContext) – AlexF

답변

2

포인터가 8 바이트 길이 인 64 비트 Windows에서 마샬링이 완전히 잘못되었으므로 그다지 이상하지 않습니다. 32 비트 Windows에서는 4 바이트 길이이고 64 비트 Windows에서는 8 바이트 길이의 IntPtr 유형을 사용해야합니다. 귀하의 경우

[DllImport("winscard.dll"] 
public static extern Int32 SCardEstablishContext(
    [In] Int32 dwScope, 
    [In] IntPtr pvReserved1, 
    [In] IntPtr pvReserved2, 
    [In, Out] ref IntPtr phContext); 

더 나은 선택은 pcsc-sharp 같은 입증 된 관리 winscard.dll를 래퍼를 사용하는 것입니다.

+0

감사 Jariq을 사용하고 있습니다. 그것을 시도 할 것이다 –