ich möchte in Visual Basic 6.0 unter Zuhilfenahme der iowkit.dll für eine eindeutige Zuordnung die Seriennummern aller am USB-Port angeschlossenen IO-Warrior-Bausteine auslesen. Dazu habe ich in mein VB6.0-Projekt das Modul iow.bas von CodeMercenaries eingebunden und greife auf die darin deklarierten DLL-Funktionen zu.
In meinem Code ermittle ich mit IowKitGetNumDevs() zuerst die Anzahl der angeschlossenen IO-Warrior-Bausteine. Über eine Schleife ermittle ich dann die Handle-Nummern sowie die Seriennummern der einzelnen Bausteine:
Code: Select all
Sub main()
Dim s As String
Dim i As Long, anz As Long, handle As Long
Dim x As Long
Dim buf As String ' Pufferstring für Seriennummer des IO-Warriors
handle = IowKitOpenDevice
anz = IowKitGetNumDevs()
s = "Anzahl vorhandener IO-Warriors: " & anz & vbNewLine & vbNewLine
For i = 0 To anz - 1
handle = IowKitGetDeviceHandle(i + 1)
s = s & "IOWarrior(" & i & ").Handle = " & handle & vbNewLine
buf = "01234567890123456789" ' String mit 20 Zeichen vorbelegen
Debug.Print i; StrPtr(buf);
x = IowKitGetSerialNumber(handle, StrPtr(buf)) ' Adresse des Puffer
Debug.Print StrPtr(buf)
s = s & "IOWarrior(" & i & ").GetSer# = " & x & vbNewLine
s = s & "IOWarrior(" & i & ").SerialNumber = " & buf & vbNewLine
s = s & vbNewLine
Next i
MsgBox s
End Sub
Bei zwei angeschlossenen Bausteinen (Version jeweils V1.0.2.1R) liefert der erste Schleifendurchlauf einen Leerstring, beim zweiten Durchlauf erhalte ich die Laufzeit-Fehlermeldung 14 "nicht genügend Zeichenfolgenspeicher", eine Meldung, die ich bisher noch nie gesehen habe. Da die DLL vermutlich in C++ programmiert wurde, muss als Stringparameter wohl die Adresse der Zeichenkette übergeben werden, die man in VB6.0 über StrPtr herausfindet, oder liege ich hier falsch? Wenn man nur die Variablenbezeichnung "buf" angibt, stürzt die gesamte Entwicklungsumgebung ab.
Die Funktion IowKitGetSerialNumber ist in iow.bas folgendermaßen deklariert:
Code: Select all
Public Declare Function IowKitGetSerialNumber _
Lib "iowkit" _
(ByVal iowHandle As Long, ByRef buffer As String) _
As Long
'Public Declare Function IowKitGetSerialNumber _
' Lib "iowkit" _
' (ByVal iowHandle As Long, ByRef buffer As Any) _
'As Long
'Public Declare Function IowKitGetSerialNumber _
' Lib "iowkit" _
' (ByVal iowHandle As Long, ByRef buffer As Long) _
'As Long
Hat hier jemand einen Tipp?
Vielen Dank im Voraus,
Peter