2012-05-17 4 views
2

스마트 카드 판독기와 통신하기 위해 .NET Windows 서비스를 만들고 있습니다. 주 구성 요소는 .NET 코드에서 DLLImport 특성과 함께 사용하고있는 winscard.dll이라는 Windows DLL입니다. Windows XP 32 비트에서는 모든 것이 잘 작동하지만, Windows 7 x64 i 0x6 ERROR_INVALID_HANDLESCardTransmit으로 전화하면 결과가 나타납니다. 응용 프로그램 (명령 줄 응용 프로그램으로 서비스) 카드 판독기에 연결할 수 있지만 카드에서 아무것도 읽을 수 없습니다.winscard.dll이 포함 된 .NET 응용 프로그램의 ERROR_INVALID_HANDLE

아이디어가 있으십니까?

+0

.NET 응용 프로그램을 anycpu가 아닌 32 비트 프로그램으로 빌드 해 보았습니까? –

+0

32 비트 응용 프로그램으로 빌드 한 경우 처리되지 않은 예외 : System.AccessViolationException : 보호 된 메모리를 읽거나 쓰려고 시도했습니다. 이것은 종종 다른 메모리가 손상되었다는 표시입니다. SmartCard.SmartCardBase.SCardListReaderGroups에서 Microsoft.Win32.Win32Native.CoTaskMemFree (IntPtr입니다 PTR) 에서 (INT32 hContext, 문자열 및 cGro 업, INT32 및 nStringSize) C에서 SmartCard.SmartCardBase.InitializeCardReader()에서 : \ 데이터 \ K7 인트라넷 \ Smar tCard \ SmartCardBase.cs : 행 152 at SmartCard.Program.Main (String [] args) in C : \ Data \ K7 인트라넷 \ 스마트 카드 \ Pro gram.cs : 줄 14 –

+0

단 하나 (http://www.groupsrv.com/dotnet/about280604.html). 훨씬 더 많은 정보를 얻지는 않습니다. –

답변

2

당신은 을 반환하지만 도 처리 할 SCardEstablishContext에 문제가있다. 을 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는 윈도우 64에 저장 유효한 값 (윈도우 8 x64 및 RDP를 통해 윈도우 2008 테스트)입니다. 또한 핸들로 사용할 때 다른 "정수"를 "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 
+0

예. 해결책입니다. –

관련 문제