日期:2014-05-16  浏览次数:21196 次

求教,C#关于发送智能卡命令的操作问题
本帖最后由 explorer114 于 2014-03-19 17:47:24 编辑
我用C# Winform写了关于操作智能卡(PC/SC)的demo,其中连接智能卡后的发送命令出现了问题。如下:
智能卡发送命令的接口,其中调用微软的winscard库,

[DllImport("winscard.dll")]
public static extern int SCardTransmit(int hCard, ref SCARD_IO_REQUEST pioSendRequest, ref byte SendBuff, int SendBuffLen, ref SCARD_IO_REQUEST pioRecvRequest, byte[] RecvBuff, ref int RecvBuffLen);

在调用的时候:
retValue = SmartCard.SCardTransmit(ArrHandle[comboBox_ReaderList.SelectedIndex], ref pioSendRequest,
 ref SendBuff[0], SendLen, ref pioRecRequest, Recvbuff, ref RecvLen);

其中 
public byte[] SendBuff = new byte[64];
public byte[] RecvBuff = new byte[64];


我发送了一个产生4个随机数的命令"0084000004",发送后,RecvLen确实等于6, 因为是4个字节随机数+2个字节状态码,可是Recvbuff数组中都是0 ,

而且我发现,在Recvbuff前加ref 也没用,请问这是怎么回事呢?跪求大神。。。
------解决方案--------------------
因为RecvLen没有给足空间的缘故吧,比如定义时声明RecvLen=1024,你试下,就可以了。