【发布时间】:2012-05-17 12:27:26
【问题描述】:
我正在创建一个 .NET Windows 服务来与智能卡读卡器进行通信。主要组件是一个名为 winscard.dll 的 Windows DLL,我在 .NET 代码中使用 DLLImport 属性。在 Windows XP 32 位上一切正常,但是当我在 Windows 7 x64 上运行它时,我在调用 SCardTransmit 时收到 0x6 ERROR_INVALID_HANDLE 结果。应用程序(作为命令行应用程序的服务)可以连接到读卡器,但不能从卡中读取任何内容。
有什么想法吗?
【问题讨论】:
-
您是否尝试过将 .NET 应用程序构建为 32 位程序而不是 anycpu?
-
如果我将其构建为 32 位应用程序,则:未处理的异常:System.AccessViolationException:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。在 Microsoft.Win32.Win32Native.CoTaskMemFree(IntPtr ptr) 在 SmartCard.SmartCardBase.SCardListReaderGroups(Int32 hContext, String& cGro ups, Int32& nStringSize) 在 SmartCard.SmartCardBase.InitializeCardReader() 在 C:\Data\K7 Intranet\Smar tCard\SmartCardBase .cs:C:\Data\K7 Intranet\SmartCard\Program 中 SmartCard.Program.Main(String[] args) 的第 152 行.cs:第 14 行
-
看来你不是唯一一个 (groupsrv.com/dotnet/about280604.html)。它并没有比你已经拥有的更多信息。
-
解决方法:使用 IntPtr 代替 int (任何类型)并实现所有 winscard.dll 方法好,求助:pinvoke.net
标签: .net windows 64-bit winscard