请做过智能卡发卡程序的达人帮我看看程序有什么问题?

cowboy0404 2005-06-02 09:34:05
我用握奇的智能卡向读卡器发取随机数的命令,每次都说我“发送命令或接收返回的数据失败”。请帮我看看是什么原因好吗?其中用到的函数是从wdcrwv.dll文件中调用的。代码如下:
typedef HANDLE (far pascal * SQRTPROC)(char *,unsigned int,unsigned int );
typedef unsigned (WINAPI *PICC_tsi_apiVB)(HANDLE fd,int len, unsigned char *comm,int *lenr,unsigned char *resp);
typedef unsigned char * (WINAPI *PCHexToBin)(unsigned char *bin,unsigned char *asc,unsigned int len);
typedef unsigned char * (WINAPI *PBinToCHex)(unsigned char *asc,unsigned char *bin,unsigned int len);
HINSTANCE hInstance;
VERIFY(hInstance=::LoadLibrary("wdcrwv.dll"));
SQRTPROC pFunction;
PICC_tsi_apiVB ICC_tsi_apiVB;
PCHexToBin CHexToBin;
PBinToCHex BinToCHex;
VERIFY(pFunction=(SQRTPROC)::GetProcAddress(hInstance,"CT_open"));
VERIFY(ICC_tsi_apiVB=(PICC_tsi_apiVB)::GetProcAddress(hInstance,"ICC_tsi_apiVB"));
VERIFY(CHexToBin=(PCHexToBin)::GetProcAddress(hInstance,"CHexToBin"));
VERIFY(BinToCHex=(PBinToCHex)::GetProcAddress(hInstance,"BinToCHex"));

fd=pFunction("m_combPort.GetCurSel()",9600,'E');//在头文件里定义HANDLE fd
if(fd<0)
{MessageBox("打开串口失败!", "错误!", MB_ICONERROR);
return;
}

UpdateData(TRUE); //读取编辑框内容
int lr;
unsigned char rep[256];
char buff[256];

unsigned int len=m_strTXData.GetLength();
CHexToBin((unsigned char *)buff,(unsigned char *)(LPCSTR )m_strTXData,len);//16进制转2进制
unsigned re1=ICC_tsi_apiVB(fd,len,(unsigned char *)(LPCSTR )buff,&lr,rep);//发送数据

if(re1==0xffff)
{
MessageBox("发送命令或接收返回的数据失败!", "错误!", MB_ICONERROR);
return;
}
else
{
BinToCHex((unsigned char *)buff,rep,(unsigned int)lr);//2进制转16进制
m_strRXData=(LPCSTR)buff;
}
UpdateData(FALSE); //更新编辑框内容
...全文
1546 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cowboy0404 2005-06-04
  • 打赏
  • 举报
回复
其后还有好多这样的*.C文件找不到路径,这是怎么回事啊!
cowboy0404 2005-06-04
  • 打赏
  • 举报
回复
我单步调试时,显示要我输入TCHAR.H这个头文件的路径,然后又要这个MBSRCHR.C文件。
我在VC98\include下找到了TCHAR.H,可是不知去哪里找MBSRCHR.C呀!
cowboy0404 2005-06-04
  • 打赏
  • 举报
回复
我在Debug时发现了这样的错误,对于语句:
VERIFY(hInstance=::LoadLibrary("wdcrwv.dll"));
指出:
- hInstance 0x00000000
unused CXX0030: Error: expression cannot be evaluated
这可能是什么原因啊?
hushuangyan74 2005-06-04
  • 打赏
  • 举报
回复
这个要自己去多多测试了。
bohut 2005-06-04
  • 打赏
  • 举报
回复
你发送的命令buff的格式是否满足要求了?
zhangnanonnet 2005-06-03
  • 打赏
  • 举报
回复
WATCH已经把程序封装了。很难判断倒是是哪出了问题,你单步调试一下fd是否非NULL,按理说使用这个已经封装好的DLL应该有例子的。或者你还是找握奇公司的人问一下为好
cowboy0404 2005-06-02
  • 打赏
  • 举报
回复
用到的函数:
HANDLE WINAPI CT_open(char *name,unsigned int param1,unsigned char param2);/*
参数: name:与读写器相连的端口名称.
串口读卡器可取COM1 COM2 COM3 COM4等
param1: 串口读卡器为波特率,9600、38400等
param2: 串口读卡器为奇偶校验,可为
"O" 奇校验
"E" 偶校验
"N" 无校验 */
unsigned WINAPI ICC_tsi_apiVB(HANDLE fd,int len, unsigned char *comm,int *lenr,unsigned char *resp); /*
fd : 已打开的端口描述符.
len : 命令comm的长度
comm : 发向卡上的命令
lenr : 从卡上接收到的数据长度
resp : 从卡上接收到的数据
返回:
0xffff通迅失败 */
unsigned char * WINAPI CHexToBin(unsigned char *bin,unsigned char *asc,unsigned int len); /*
参数:
bin:二进制结果串: 0x12,0x34,0xE1,0xFA
asc:十六进制字符串,如"1234E1FA"
len:十六进制字符串长度
返回值:
二进制结果串的指针 */
unsigned char * WINAPI BinToCHex(unsigned char *asc,unsigned char *ibn,unsigned int len); /*
参数:
asc:十六进制字符串,如"1234E1FA"
bin:二进制结果串: 0x12,0x34,0xE1,0xFA
len:二进制串长
返回值:
十六进制字符串的指针 */

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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