3

我正在创建一个 .NET Windows 服务来与智能卡读卡器进行通信。主要组件是一个名为 winscard.dll 的 Windows DLL,我在 .NET 代码中使用 DLLImport 属性。在 Windows XP 32 位上一切正常,但是当我在Windows 7 x64上运行它时,我在调用SCardTransmit时收到0x6 ERROR_INVALID_HANDLE结果。应用程序(作为命令行应用程序的服务)可以连接到读卡器,但不能从卡中读取任何内容。

任何的想法?

4

1 回答 1

5

您对SCardEstablishContext有问题,它将返回0但也处理0。使用IntPtr而不是Integer

Public Declare Function SCardEstablishContext Lib "Winscard.dll" (ByVal dwScope As Integer, _
                                                                      ByVal pvReserved1 As Integer, _
                                                                      ByVal pvReserved2 As Integer, _
                                                                      ByRef phContext As IntPtr) As Integer

phContext 将在 Windows x64 中存储有效值(通过 RDP 测试的 Windows 8 x64 和 Windows 2008)。当它用作句柄时,也将其他“Integer”替换为“IntPtr”。

Public Declare Function SCardConnect Lib "Winscard.dll" Alias "SCardConnectA" (ByVal hContext As IntPtr, _
                                                                                   ByVal szReaderName As String, _
                                                                                   ByVal dwShareMode As Integer, _
                                                                                   ByVal dwPrefProtocol As Integer, _
                                                                                   ByRef hCard As IntPtr, _
                                                                                   ByRef ActiveProtocol As IntPtr) As Integer
于 2012-11-29T03:26:01.897 回答