3

スマート カード リーダーと通信する .NET Windows サービスを作成しています。メインコンポーネントは、.NET コードの DLLImport 属性で使用している winscard.dll という Windows DLL です。Windows XP 32 ビットではすべて正常に動作しますが、Windows 7 x64で実行すると、 SCardTransmit を呼び出すときに 0x6 ERROR_INVALID_HANDLE結果が返されます。アプリケーション (コマンド ライン アプリとしてのサービス) はカード リーダーに接続できますが、カードから何も読み取ることができません。

何か案が?

4

1 に答える 1

5

SCardEstablishContextに問題があり、 0を返しますが、 0も処理しますIntegerの代わりにIntPtrを使用します。

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 (Windows 8 x64 および RDP テスト済みの 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 に答える