64位win7 C#调用PCSC读卡器 SCardTransmit 返回-2146435068 放在32位操作系统正常何解?

问题描述

请教在win764位上运行此程序SCardTransmit返回-2146435068在32位操作系统上就正常,是什么原因?publicbyte[]sendAPDU(stringsendMessage,byte[]SW12){if(sendMessage.Length%2!=0){sendMessage=sendMessage+"0";}byte[]sendMessageBuffer=StringToByteSequence(sendMessage);byte[]receiveMessageByte=newbyte[256];intreceiveLength=256;runResult=PCSCDLL.SCardTransmit(hCard,SCARD_PCI_T1,sendMessageBuffer,sendMessageBuffer.Length,null,receiveMessageByte,refreceiveLength);if(runResult!=SCARD_SUCCESS){errMsg="获取读卡器列表,错误代码为:"+runResult.ToString("X");Log.WriteLog(errMsg);thrownewException(errMsg);}byte[]retMessage=newbyte[receiveLength-2];for(inti=0;i<receiveLength-2;i++){retMessage[i]=receiveMessageByte[i];}SW12[0]=receiveMessageByte[receiveLength-2];SW12[1]=receiveMessageByte[receiveLength-1];returnretMessage;}///////////////////////////////////////////////////////////////////////////////////////////////publicclassSCARD_IO_REQUEST{publicintdwProtocol;publicintcbPciLength;}//////////////////////////////////////////////////////////////////////////////////////////////////<summary>///向卡片发送数据///</summary>///<paramname="hCard">卡片句柄</param>///<paramname="pioSendPci">指令的协议头结构的指针</param>///<paramname="pbSendBuffer">写卡数据</param>///<paramname="cbSendLength">写卡数据长度</param>///<paramname="pioRecvPci"></param>///<paramname="pbRecvBuffer">返回数据</param>///<paramname="pcbRecvLength"></param>///<returns></returns>[DllImport("WinSCard.dll")]publicstaticexternintSCardTransmit(inthCard,IntPtrpioSendPci,byte[]pbSendBuffer,intcbSendLength,SCARD_IO_REQUESTpioRecvPci,byte[]pbRecvBuffer,refintpcbRecvLength);

解决方案

解决方案二:
检验一下参数中是否有些数据类型的位数64位跟32位不同
解决方案三:
原型LONGWINAPISCardTransmit(_In_SCARDHANDLEhCard,_In_LPCSCARD_IO_REQUESTpioSendPci,_In_LPCBYTEpbSendBuffer,_In_DWORDcbSendLength,_Inout_opt_LPSCARD_IO_REQUESTpioRecvPci,_Out_LPBYTEpbRecvBuffer,_Inout_LPDWORDpcbRecvLength);代码中是这样
解决方案四:
'操作读卡器大多是要调用提供的DLL动态库的,但DLL是区分32和64位的,而为了省事厂家都只会提供32位版本,所以楼主明白了吗

时间: 2024-10-26 01:19:21

64位win7 C#调用PCSC读卡器 SCardTransmit 返回-2146435068 放在32位操作系统正常何解?的相关文章

VB.net 在64位win7系统下,调用API函数,在传址时为什么总会发生异常。。

问题描述 请帮教各位高人,VB.net在64位win7系统下,调用API函数,在传址时为什么总会发生异常..函数声明:DeclareSubdmc_move_line3Lib"DMC.dll"(ByRefaxisAsShort,ByValDist1AsInteger,ByValDist2AsInteger,ByValDist3AsInteger,ByValposi_modeAsShort)函数调用:DimAxisArray(3)AsShortDimLineEndArray(3)AsInt

64位Win7系统真的比32位Win7快吗?

Windows 7有32位版本和64位版本,但是64位一定就比32位的运行速度快吗? 首先,相信选择64位Windows 7的网友中很有大比例是存储体大于或等于4GB的.如果在32位Win7下,可使用的内存显示为仅3.25G.那么其他的剩余内存跑到哪里去了?请继续往下看. 在32位元模式下的CPU,只能定址最大4GB的存储体,受制于此,32位元的操作系统也只能识别最大4GB的存储体,由于在系统中,除了内存之外,还有其他的存储设备,因此,真正可以供内存利用的存储体空间小于4GB,也就是我们看到的系

解决64位Win7系统无法连接32位XP网络共享打印机

  在使用WIN7 64位旗舰版操作系统的时候发现一个问题,64位Windows7系统无法连接32位XP网络共享打印机,而32位WIN7就可以. HP客服解释说XP 32位的操作系统与WIN 7 64位的数据不匹配,无法达到共享打印的效果,微软官网的方法是要安装WIN 7SP1补丁可解决此问题- 这里分享个简单的解决方法: 方法一: 先去下载一个64位的打印机驱动,然后添加打印机,注意这里要添加的是本地打印机,安装官网的驱动,不要检测打印机,安装完后打开打印机属性配置窗口,点击<端口>页,在该

64位WIN7中禁用驱动程序签名强制

计算机硬件越来越白菜价,更多的人为了使用更高的配置,都用上了4G或者8G的内存,可惜32位的系统是无法支持4G以上内存的,大多数的朋友都换上了又炫又新鲜的64位win7系统,而由于64位的win7考虑了系统安全的问题,对于未有认证签名的驱动程序进行了限制安装,但是大多数使用了驱动文件的小程序不可能有数字签名认证的,难道我们就不能顺利的在64位win7上面使用我们之前的驱动程序了? 64位win7禁用驱动程序签名强制 其实想要在64位win7中使用未有签名的驱动程序还是有很多方法的,如上图中,开机

64位win7旗舰版如何解决安装软件时提示内存不足

  原因分析: 出现这样的故障其实并不是真正内存出现不足,其实这是因为win7系统用户使用操作系统平台导致的. 小常识:如果用户使用的是32位操作系统,那么关于内存大小基本上没有什么要求,只要超过1GB就可以,但是如果使用的是64位操作系统的话,那么对于内存条大小要求就不一样,基本上是要求至少在4GB以上才可以. 而win7系统用户在安装软件过程中,明明内存还有很多剩余空间,但是系统却会提示出内存不足提示,其实是因为使用的是64位系统,而对内存要求没有达到基本要求,所以才会出现这种情况的. 解决

64位Win7系统iTunes无法识别5s

  已购买iPhone5s的用户,近期在使用iTunes时可能会遇到如下问题:使用数据线与PC(64位Win7系统)端连接时,iTunes无法识别到iPhone5s,重装iTunes后也无法解决.经研究,32位系统可识别,但是64位系统下会出现无法识别的状况. 解决64位Win7系统iTunes无法识别iPhone5s方法如下: 1.首先确保你的itunes是最新版本(11.1.1.11),插上的你连接线,确保可以看到里面的照片的状态. 2.右键我的电脑,管理.设备管理器.找到移动设备. 3.右

64位win7系统dbeaver安装问题

问题描述 64位win7系统dbeaver安装问题 有人在64位pc上装过dbeaver吗, 以前在32位机器上安装没什么问题. 现在换了个64位win7系统,如果安装dbeaver自带的jre,整个安装过程没问题,安装完成之后,启动不了,就是点击运行图标没反应 如果不安装dbeaver自带的jre,启动就出现一个plugin中一个文件找不到main方法 解决方案 http://dbeaver.jkiss.org/download/ 请下载对应的版本

32位xp安装visual c#2010 想访问64位win7上的oracle10g数据库?

问题描述 32位xp安装visual c#2010 想访问64位win7上的oracle10g数据库? 32位xp安装visual c#2010 想访问64位win7上的oracle10g数据库,请问怎么实现?? 解决方案 win7安装oracle10g数据库win7 旗舰版 64位安装 oracle10g 32位win7 64位oracle10G 的安装 解决方案二: 按照好oracle驱动,直接就可以访问,你的服务器需要打开防火墙端口.

64位win7下PL/SQL Developer 报“ORA-12154: TNS:无法解析指定的连接标识符”问题的一个解决办法

   接着上次的话题,在64位win7上装了32位oracle10g 以后又出现了新的问题:    在使用oracle自带的sqlplus连接本机或者远程的oracle实例均能成功过,但使用 PL/SQL Developer (我装的是7.1版本) 连接任何一个实例在登录时均报"ORA-12154: TNS:无法解析指定的连接标识符"错误.    冷静,先分析原因,既然sqlplus已经能够连接,说明oracle的安装(至少客户端的安装)是正常的,TNS的配置是正确的.问题应该出在PL