我从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作为平台和发布模式时,它会得到解决。这种奇怪的行为,为什么它在调试模式下工作?
答案 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。