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

qixip 2016-03-12 10:24:49
请教 在win7 64位上运行此程序 SCardTransmit 返回-2146435068

在32位操作系统上就正常,是什么原因?

public byte[] sendAPDU(string sendMessage,byte[] SW12)
{
if (sendMessage.Length % 2 != 0)
{
sendMessage = sendMessage + "0";
}

byte[] sendMessageBuffer = StringToByteSequence(sendMessage);

byte[] receiveMessageByte = new byte[256];
int receiveLength = 256;

runResult = PCSCDLL.SCardTransmit(hCard
, SCARD_PCI_T1
, sendMessageBuffer
, sendMessageBuffer.Length
, null, receiveMessageByte, ref receiveLength);

if (runResult != SCARD_SUCCESS)
{
errMsg = "获取读卡器列表,错误代码为:" + runResult.ToString("X");
Log.WriteLog(errMsg);
throw new Exception(errMsg);
}

byte[] retMessage = new byte[receiveLength - 2];

for (int i = 0; i < receiveLength - 2; i++)
{
retMessage[i] = receiveMessageByte[i];
}

SW12[0] = receiveMessageByte[receiveLength - 2];
SW12[1] = receiveMessageByte[receiveLength - 1];

return retMessage;
}

///////////////////////////////////////////////////////////////////////////////////////////////
public class SCARD_IO_REQUEST
{
public int dwProtocol;
public int cbPciLength;
}
///////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// 向卡片发送数据
/// </summary>
/// <param name="hCard">卡片句柄</param>
/// <param name="pioSendPci">指令的协议头结构的指针</param>
/// <param name="pbSendBuffer">写卡数据</param>
/// <param name="cbSendLength">写卡数据长度</param>
/// <param name="pioRecvPci"></param>
/// <param name="pbRecvBuffer">返回数据</param>
/// <param name="pcbRecvLength"></param>
/// <returns></returns>
[DllImport("WinSCard.dll")]
public static extern int SCardTransmit(
int hCard,
IntPtr pioSendPci,
byte[] pbSendBuffer,
int cbSendLength,
SCARD_IO_REQUEST pioRecvPci,
byte[] pbRecvBuffer,
ref int pcbRecvLength
);

...全文
548 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2016-03-12
  • 打赏
  • 举报
回复
'操作读卡器大多是要调用提供的DLL动态库的,但DLL是区分32和64位的, 而为了省事厂家都只会提供32位版本,所以楼主明白了吗
qixip 2016-03-12
  • 打赏
  • 举报
回复
原型
LONG WINAPI SCardTransmit(
_In_ SCARDHANDLE hCard,
_In_ LPCSCARD_IO_REQUEST pioSendPci,
_In_ LPCBYTE pbSendBuffer,
_In_ DWORD cbSendLength,
_Inout_opt_ LPSCARD_IO_REQUEST pioRecvPci,
_Out_ LPBYTE pbRecvBuffer,
_Inout_ LPDWORD pcbRecvLength
);

代码中是这样



john_QQ:2335298917 2016-03-12
  • 打赏
  • 举报
回复
检验一下参数中是否有些数据类型的位数64位跟32位不同

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧