有用c++build写的DLL, 由于第一次使用VB, 对DLL上面的参数在VB中重新定义不熟悉,
比喻unsigned char * 在VB中是定义成byref a() as byte 还是Byval a as string 拿不定主意,并且好像都可以!! DLL文件主要是IC卡上面的标准调用,象Request、Anticoll、select、Read等等依此函数,本人愿意高分拿出交流,如果做过ic卡或对DLL相当熟悉的,留下Email, 解答问题愿意给高分.
比喻unsigned char * 在VB中是定义成byref a() as byte 还是Byval a as string 拿不定主意,并且好像都可以!! DLL文件主要是IC卡上面的标准调用,象Request、Anticoll、select、Read等等依此函数,本人愿意高分拿出交流,如果做过ic卡或对DLL相当熟悉的,留下Email, 解答问题愿意给高分.
但VB中字符都是DBCS的,因此在做一些底层的操作试会又麻烦,所以有时用byref a() as byte 写起来既丢失了VB的建议性,又不像c/c++的指针那样流畅,但不会为一些莫名其妙的问题去排错
我在做通讯时都用a() as byte
Declare Function RFMifare_AntiColl Lib "advic32.dll" (CardSnr As Long) As Long
Declare Function RFMifare_Select Lib "advic32.dll" (ByVal CardSnr As Long) As Long
Declare Function RFMifare_LoadKey Lib "advic32.dll" (ByVal mode As Long, ByVal sector As Long, key As Byte) As Long
Declare Function RFMifare_Authentication Lib "advic32.dll" (ByVal mode As Long, ByVal sector As Long, ByVal blockno As Long) As Long
Declare Function RFMifare_Read Lib "advic32.dll" (ByVal blockno As Long, ReadBuff As Byte) As Long例子:
status = RFMifare_Request(1, cdtype)
If status = 0 Then
If cdtype <> 4 And cdtype <> 16 Then
MsgBox "非门禁用卡!"
Exit Sub
End If
Else
StatusBar1.Panels(3) = " 呼叫失败"
Exit Sub
End If status = RFMifare_AntiColl(cdsnr)
If status <> 0 Then
StatusBar1.Panels(3) = "防碰撞选择失败"
Exit Sub
End If status = RFMifare_Select(cdsnr)
If status <> 0 Then
StatusBar1.Panels(3) = " 卡激活失败"
Exit Sub
End If
status = RFMifare_LoadKey(4, 13, ymima(0))
If status <> 0 Then
StatusBar1.Panels(3).Text = " 密码传送失败!"
Exit Sub
End If status = RFMifare_Authentication(4, 13, 55)
If status <> 0 Then
StatusBar1.Panels(3).Text = " 密码校验失败!"
Exit Sub
End If status = RFMifare_Read(52, ReadBuff(0))
......
定义长度为0, 使用函数后可以看到返回数据吗? 我可以用Email与你交流吗?
类型时,运行函数报xxxxx地址不能为"read"错误?
你事先要声明数组
Public ReadBuff(16) As Byte