//功能描述:从第33个字节开始读取数据,读取数据长度为40bytes
//返回值:读卡所得的字符串.有数据值--成功,空串--失败 
//-------------------------------------------
//操作步骤:
//1.上电
//2.检查卡的状态及类型
//3.读卡
//4.下电
//注意:失败后返回要下电操作,并释放串口long ll_result    //返回值
string ls_bfr     //读卡缓冲变量 
string ls_ATRbuffer  //检验卡类型缓冲变量 
long ll_startpos    //读卡开始点
long ll_nob         //读取数据长度
long i ,ll_PortHandle
string ls_com
ls_bfr =  space(40)  //预分配内存
ls_ATRbuffer = space(4)       //预分配内存
//初始化读卡器
for i = 1 to 4   //循环查找四个串口,找到后退出循环
ls_com = "COM"+string(i)
ll_result = OpenPort(ls_com, ll_PortHandle)
If ll_result = 0 Then exit
nextif ll_porthandle =0 then
messagebox("错误","无法初始化IC卡读写设备。读卡操作中断。",stopsign!)
return ''  
else
SelectPort(ll_PortHandle)
end if//1.上电
poweron()
//2.检查卡的状态及类型
if cardpresent() <> 1 then
messagebox("提示","没有IC卡在读写器内。~n~r读卡操作中断。")
poweroff()
closeport()
return ''
end if
if getcardtype(ls_atrbuffer) <> 2 then
messagebox("错误","该卡不是横县医保卡。请用医保专用卡。~n~r读卡操作中断。")
poweroff()
closeport()
return ''
end if
//3.读卡
ll_result =  Read_4442_NO_PB(33,40,ls_bfr) //虚读一次  注:虚读的原因见相关文档
ll_result =  Read_4442_NO_PB(33,40,ls_bfr) //实读
if ll_result <> 0 then 
messagebox("提示","无法读取卡内信息。~n~r读卡操作中断。")
   poweroff()
closeport()
return ''        // 读卡失败返回空串
end ifls_bfr = f_dmndecrypto(ls_bfr) //解密
poweroff()
closeport()
return ls_bfr         //返回字符串

解决方案 »

  1.   

    读写串口用spcomm,像Read_4442_NO_PB这样的函数应该在其他地方有定义吧
      

  2.   

    不错,他都封装在micro900。dll文件里面了。
    这个我回声明了,请问能解释一下‘读写串口用spcomm’吗?谢谢
      

  3.   

    在pb里是这样声明的:
    Function long OpenPort(string PortName,Ref long PortHandle)  library "micro900.dll"
    Function long ClosePort()  library "micro900.dll"
    Function   Long SelectPort (Long PortHandle) Library "micro900.dll"  
    Function  Long  PowerOn()  Library "micro900.dll" 
    Function  Long  PowerOff()  Library "micro900.dll" 
    Function  Long CardChanged()  Library "micro900.dll" 
    Function  Long GetCardType(Ref string  ATRBuffer)  Library "micro900.dll" 
    Function string GetCardName(long CardType)  Library "micro900.dll" 
    Function  Long CardPresent()  Library "micro900.dll" 
    Function  Long C_Read_4442_With_PB ( Long StartPos, Long NOB , &
       ref char Bfr,ref char PB_Bf)  Library "micro900.dll"  alias for  Read_4442_With_PB
    Function  Long Read_4442_With_PB ( Long StartPos, Long NOB , &
                     ref string Bfr,ref string PB_Bf)  Library "micro900.dll" 
    Function  Long Read_4442_NO_PB ( Long StartPos, Long NOB , &
                                    ref string  Bfr)  Library "micro900.dll"
    Function  Long C_Read_4442_NO_PB ( Long StartPos, Long NOB , &
                          ref char  Bfr)  Library "micro900.dll" alias for Read_4442_NO_PB
    Function  Long Read_4442_PB ( Ref  string PB_Bfr)  Library "micro900.dll" 
    Function  Long C_Read_4442_PB ( Ref  char PB_Bfr)  Library "micro900.dll"  &
                                                         alias for Read_4442_PB  
    Function  Long Write_4442_PB(long Address)  Library "micro900.dll" 
    Function  Long Write_4442(long StartPos,char DestByte,char PBSetFlag)  Library "micro900.dll" 
    Function  Long Write_4442_Array(long StartPos,long NOB,Ref string DestByte, & 
                                                           Ref string  PBSetFlag)  Library "micro900.dll" 
    Function  Long C_Write_4442_Array(long StartPos,long NOB,Ref char DestByte, & 
               Ref char PBSetFlag)  Library "micro900.dll" alias for  Write_4442_Array
    Function  Long Verify_4442_PSC(char PSC1,char PSC21,char PSC3)  Library "micro900.dll" 
    Function  Long Read_4442_SM(Ref string SM_Bfr)  Library "micro900.dll" 
    Function  Long C_Read_4442_SM(Ref char SM_Bfr)  Library "micro900.dll"  &
                                                  alias for Read_4442_SM
    Function  Long Write_4442_SM(long SMAddress,char SMByte)  Library "micro900.dll" 
    请问pb中的long, ref long ,ref string 分别对应delphi中的什么类型?
      

  4.   

    spcomm组件
    http://www.2ccc.com/article.asp?articleid=75
    可以参考这个例子
    http://www.2ccc.com/article.asp?articleid=1047
      

  5.   

    到明华网上下载一个关于IC卡的驱动程序的安装程序,上面有Delphi的例子,其实这些都是简单的,声明也是很简单的呀