0

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

4

1 回答 1

4

我在那里没有发现任何异常,因为对于指针为 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 包装器,例如pcsc-sharp

于 2014-09-01T09:02:35.053 回答