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

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

我建立环境的呼声是

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

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

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

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


我看不出有什么不寻常的地方,因为你的编组对于指针长度为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);

在你的情况下更好的选择是使用像pcsc-sharp这样经过验证的管理winscard.dll封装。

链接地址: http://www.djcxy.com/p/27965.html

上一篇: SCardEstablishContext not setting context pointer in release mode

下一篇: Release built DLL with Debug.WriteLine