你的这个函数
'写数据块
Declare Function rfs_PutDataBlock Lib "RFSAPIV2.dll" ( _
ByVal hScanner As Long, _ '句柄
ByRef cardID As Byte, _ '卡号
ByVal nAddress As Long, _ '开是地址
ByVal nLen As Long, _'一次写的字节长度
ByRef DB As rfs_DataBlock _ 欲写如入的数据
) As apiReturn
这两个:
ByVal nAddress As Long, _ '开是地址
ByRef DB As rfs_DataBlock _ 欲写如入的数据
哪一个是写入数据的地方?
若是第一个:ByVal nAddress As Long,你就这样调用 Varptr(a(0)),就可以把数组的基地址传过去。
res = rfs_PutDataBlock(m_hScanner, IDBuffer.num(idNum * RFS_ID_MAX_SIZE), Varptr(a(0)), 1, DB(0))
若是第二个:ByRef DB As rfs_DataBlock,我猜想 Value 可能是个指针吧?让Value=varptr(a(0))试一下.
DB(0).value=Varptr(a(0))
res = rfs_PutDataBlock(m_hScanner, IDBuffer.num(idNum * RFS_ID_MAX_SIZE), CLng(writeAddress), 1, DB(0))
' 数据块结构
Type rfs_DataBlock
Value As Long ' 读出或写入数据值
IsOk As Long ' 返回读写是否成功
End Type
' 读数据块
Declare Function rfs_ReadDataBlock Lib "RFSAPIV2.dll" ( _
ByVal hScanner As Long, _
ByRef cardID As Byte, _
ByVal nAddress As Long, _
ByVal nLen As Long, _
ByRef DB As rfs_DataBlock _
) As apiReturn
'写数据块
Declare Function rfs_PutDataBlock Lib "RFSAPIV2.dll" ( _
ByVal hScanner As Long, _
ByRef cardID As Byte, _
ByVal nAddress As Long, _
ByVal nLen As Long, _
ByRef DB As rfs_DataBlock _
) As apiReturn
Public Const RFS_ID_MAX_SIZE = 8 '电子标签的ID号最多8字节(64bits)
Public Const rfs_OK = &H0
'操作成功
Type apiReturn
apiReturn As Integer
End Type
Type rfs_DataBlock
Value As Long ' 读出或写入数据值
IsOk As Long ' 返回读写是否成功
End Type
'写数据块
Declare Function rfs_PutDataBlock Lib "RFSAPIV2.dll" ( _
ByVal hScanner As Long, _ '句柄
ByRef cardID As Byte, _ '卡号
ByVal nAddress As Long, _ '开是地址
ByVal nLen As Long, _'一次写的字节长度
ByRef DB As rfs_DataBlock _ 欲写如入的数据
) As apiReturn
Dim I As Integer
Dim DB(2) As rfs_DataBlock
Dim wd As String
wd = "&H" & writeData '(TEXT)的内容
DB(0).Value = CLng(wd)
For I = 0 To 2 Step 1
res = rfs_PutDataBlock(m_hScanner, IDBuffer.num(idNum * RFS_ID_MAX_SIZE), CLng(writeAddress), 1, DB(0))
If res.apiReturn = rfs_OK Then
Exit For
End If
Next I
If res.apiReturn = rfs_OK Then
List1.AddItem CStr(DB(0).Value)
Else
MsgBox "写数据字失败!", vbExclamation
End If
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
Private Sub Command1_Click()
Dim s As String
Dim a() As Integer
s = "中国"
ReDim a(0 To Len(s) - 1)
CopyMemory ByVal VarPtr(a(0)), ByVal StrPtr(s), LenB(s)
汉字也没有什么特别的呀,也就是两个byte呀!
Dim Arrstr(3) as byte
open "d:\1.txt" for binary Access write as #1
Put #1,,"中国"
close #1
Open "d:\1.txt" for binary Access read as #1
Get #1,,arrstr
Close #1
debug.print Strconve(arrstr,vbUnicode)