2014-09-01 82 views
0

我从C#调用winscard.dll方法,并且在调试模式下一切正常。问题我得到的是在释放模式SCardEstablishContext未在发布模式下设置上下文指针

我的呼叫建立上下文

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

在我的测试应用程序时,我把这个pntContext变量似乎得到在调试模式设置正确。但是,在发布模式下它没有被设置。但奇怪的是,返回码仍然是0(成功)。

所以,我只是想知道可能会导致这种情况的是什么情况,或者我可能做错什么其他事情?

P.S. 我还检查的一件事是编译平台设置为任何CPU。我正在尝试更换平台,并且当我将x86作为平台和发布模式时,它就会开始工作。这种奇怪的行为,为什么它然后在调试模式下工作?

+0

你在使用什么操作系统?我已经在Win7和win8上使用了这个api与anyCpu编译,我没有注意到你遇到的问题。 无论如何,我使用此语法 昏暗hContext作为IntPtr的= Marshal.AllocHGlobal(Marshal.SizeOf(mContext)) mLastError = SCardEstablishContext(Scope.User,IntPtr.Zero,IntPtr.Zero,hContext) – AlexF 2014-09-01 08:36:14

回答

2

我看不出什么不寻常的东西,因为你的编组对于64位Windows完全错误,其中指针长度为8字节。您应该使用IntPtr类型,它在32位Windows上为4个字节,在64位Windows上为8个字节。你的情况

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

即使是更好的选择是使用成熟的管理winscard.dll包装像pcsc-sharp

+0

由于Jariq。将尝试它 – 2014-09-01 10:18:31