SCardEstablishContext未在发布模式下设置上下文指针

时间:2014-09-01 07:37:27

标签: c# smartcard native-code winscard

我从C#调用winscard.dll方法,一切都在调试模式下正常工作。我得到的问题是处于发布模式

我建立上下文的呼吁是

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

在我的测试应用程序中,当我调用它时,pntContext变量似乎在调试模式下正确设置。但是,在发布模式下它没有设置。但奇怪的是,返回代码仍为0(成功)。

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

P.S。 另外我检查的一件事是编译平台设置为任何CPU。我正在尝试更换平台,当我将x86作为平台和发布模式时,它会得到解决。这种奇怪的行为,为什么它在调试模式下工作?

1 个答案:

答案 0 :(得分:3)

我认为没有什么不寻常之处,因为对于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