vb 调用dll的问题

javaprogrammerzhang 2009-06-02 07:55:28
这是一个c写的读卡函数
unsigned pascal ICC_read_bin(HANDLE fd,long offset,int len,unsigned char *resp); /*
参数: fd : 已打开的端口描述符.
offset : 对CPU卡为文件偏移量 对存储卡为绝对地址
len : 欲读数据的长度
resp : 读出的数据
厂商就只给了接口和动态链接库文件
现在我用vb调用该读卡函数

'读卡
Declare Function ICC_read_bin Lib "crwicc.dll" (ByVal fd As Long, ByVal offSet As Long, ByVal leng As Long, ByVal ReadDate As String) As Long

用vb调用动态链接库

然后我在vb里这样写

ReadDate = ""
readIC = ICC_read_bin(hPort, 64, 15, ReadDate)
If Hex(readIC) <> 9000 Then
MsgBox "对IC卡读取数据失败,检查IC卡是否损毁"
Else
MsgBox ReadDate
MsgBox Left(Trim(ReadDate), 4)
End If

为什么MsgBox ReadDate 为6000 MsgBox Left(Trim(ReadDate), 4) 为空
读出的内容应该是010123457666666 的
还请大家指教 在线等了
...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyserver 2009-06-02
  • 打赏
  • 举报
回复

Private Declare Function ICC_read_bin Lib "crwicc.dll" (ByVal fd As Long, ByVal offSet As Long, ByVal leng As Long, ByVal ReadDate As String) As Long

Sub ReadData()
Dim lRet As Long
Dim strBuffer As String

strBuffer = String(100, vbNullChar)
lRet = ICC_read_bin(hPort, 64, Len(strBuffer), strBuffer)
If Hex(lRet) <> 9000 Then
MsgBox "对IC卡读取数据失败,检查IC卡是否损毁"
Else
strBuffer = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
MsgBox strBuffer
MsgBox Left(Trim(strBuffer), 4)
End If
End Sub
simon__sun 2009-06-02
  • 打赏
  • 举报
回复
Declare Function ICC_read_bin Lib "crwicc.dll" (ByVal fd As Long, ByVal offSet As Long, ByVal leng As Long, Byref ReadDate As String) As Long


是地址传递
winter75 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 javaprogrammerzhang 的帖子:]
这是一个c写的读卡函数
unsigned pascal ICC_read_bin(HANDLE fd,long offset,int len,unsigned char *resp); /*
参数: fd : 已打开的端口描述符.
offset : 对CPU卡为文件偏移量 对存储卡为绝对地址
len : 欲读数据的长度
resp : 读出的数据
厂商就只给了接口和动态链接库文件
现在我用vb调用该读卡函数

'读卡
Declare Function ICC_read_bin Lib "crwicc.dll" (ByVal fd As Lo…
[/Quote]


ReadDate = ""
readIC = ICC_read_bin(hPort, 64, 15, ReadDate)
If Hex(readIC) <> 9000 Then
MsgBox "对IC卡读取数据失败,检查IC卡是否损毁"
Else
MsgBox ReadDate
MsgBox Left(Trim(StrConv(ReadDate,vbUnicode)), 4) '要进行一次转换

End If
贝隆 2009-06-02
  • 打赏
  • 举报
回复
没懂,帮顶
goosen 2009-06-02
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim ReadDate As String ' MsgBox Left(Trim(ReadDate), 4) 为空

ReadDate = 6000
MsgBox Left(Trim(ReadDate), 4)

End Sub

一样啊

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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