带有winscard.dll 的.NET 应用程序中的ERROR_INVALID_HANDLE

Pet*_*iss 4 .net windows 64-bit winscard

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

任何想法?

Art*_*tem 6

您对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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)