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

本文关键字:设置 上下文 指针 模式 布模式 SCardEstablishContext | 更新日期: 2023-09-27 18:20:21

我从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作为平台和发布模式时,它就成功了。如此奇怪的行为,为什么它在调试模式下工作?

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

我没有发现任何异常,因为指针长度为8字节的64位Windows的封送处理完全错误。您应该使用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包装器,如pcscsharp。