出现问题请VB高手帮忙,我再用VB编写读非接触式IC卡程序。出现问题请VB高手帮忙已知条件:该卡再0扇区的0数据块内存储了四个字节的CSN(十六进制),1扇区的密码为CSN+CSN的左起2个字节。(只有验证了1扇区的密码才能读1扇区内容)。厂家提供的是dcic32.dll.、
 
我编程出现的问题:我用dcic32.dll中提供的IC_ReadMifare(icdev, address, databuff32)来读0扇区0数锯块。其中databuff32为string类型。读出来后系统显示的databuff32为乱码(r??....eghfi)我需要:1,怎么操作才能让databuff32不显示乱码。最好以十六进制的形式显示出来。 2.另外,我还遇到一个问题:首次运行时,0扇区密码装载成功后,也能成功核对。退出运行,但是卡依然再读卡器上。过一段时间之后,再次运行,却不能成功装载密码,但是核对密码却成功。只有我重启之后首次运行才正常。我的代码中有释放端口和关闭射频模块的功能。我不明白这到底是怎么回事?请大侠指点一二!非常感激!虽然分数不多但是我会倾囊相赠!
我的代码如下:
Private Sub Command1_Click()Dim uckey(6) As Byteuckey(0) = &HA0
uckey(1) = &HA1
uckey(2) = &HA2
uckey(3) = &HA3
uckey(4) = &HA4
uckey(5) = &HA5
                    If icdev < 0 Then  '初始化系统
  icdev = IC_InitComm(100)
End If
If icdev <= 0 Then
      List1.AddItem ("初始化系统失败!")     Exit Sub
End If
List1.AddItem ("初始化成功打开串口!")
st = IC_Load_Key(icdev, 0, 0, uckey(0))   '装载0扇区的密码到读写器,这和后面要
If st <> 0 Then                                        '校验0扇区的密码是相对应的
      List1.AddItem ("0号扇区密码装载失败!")
   ' Exit Sub
   End If
List1.AddItem ("0号扇区密码装载成功!")st = IC_Card(icdev, 1, snr)    '寻卡函数 cardmode=1 可对卡连续操作,为0时如果执行了HALT操作
If st <> 0 And st <> 1 Then                '则卡必须离开感应区后才能再次操作
      List1.AddItem ("调用 IC_Card()函数出错,请检查设备连接")
      Exit Sub
End If
If st = 1 Then
       List1.AddItem ("没有找到卡片")
      Exit Sub
End If
List1.AddItem ("感应区内发现了卡号如下:")
'List1.AddItem Str(snr)
List1.AddItem LongAsULong2Double(snr)sector = 0
st = IC_Authentication(icdev, 0, sector) '核对卡密码
If st <> 0 Then
     List1.AddItem "核对0号扇区密码失败!"
     Exit Sub
End If
List1.AddItem "核对0号扇区密码成功!"
databuff32 = " "
 address = 0
st = IC_ReadMifare(icdev, address, databuff32)  '读0扇区0号数据块的数据
If st <> 0 Then
     List1.AddItem "读卡失败!"
     Exit SubEnd If
List1.AddItem "read:0扇区0数据块" + databuff32

解决方案 »

  1.   

    问题1:
    把databuff32定义为Byte型,这样输出的就是十进制数,再通过Hex函数转成16进制字符串就行了。问题2:
    估计还是端口没有释放的问题,你可以把程序退出以后再用别的程序尝试读写相关的端口试试。
      

  2.   

    把databuff32定义为Byte型,这样输出的就是十进制数,再通过Hex函数转成16进制字符串就行了。 我试过了,不可以。因为databuff32所需的函数是调用dll,必须为string,转换为byte的时候,提示内存错误啊。直接终止程序了。
      

  3.   

    LZ:
    Dim uckey(6) As Byte
    应该为
    Dim uckey(5) As Byte 
    前句定义了7的元素的数组。 
      

  4.   

    会不会是编码的问题,需要把Unicode转为utf8吗?
      

  5.   

    lz,厂家提供的是dcic32.dll,而你用dcic32.dll中提供的IC_ReadMifare(icdev, address, databuff32)来读0扇区0数锯块,出现乱码,你完全可以咨询厂家IC_ReadMifare函数输出的是什么格式的编码,应该可以解决此问题.
      

  6.   

    zdingyun
    谢谢你,知道你很仔细的看我的代码了。你说的问题我已经改了,谢谢。不过那部分代码是0扇区的,不能解决我的问题。能不能再帮忙看下啊
      

  7.   

    应该只是对dll文件调用时,函数声明的问题才对。找厂家要一个声明例子,一般情况下这些问题都能解决!
      

  8.   

    cqq_chen 谢了,我核对过了,没问题啊
      

  9.   

    问题已经解决,是调用函数的问题,(函数后加hex,就不显示乱码了,该函数也是提供的一种)超级低级的错误。呵呵