Forum: PC-Programmierung FTDI-Chip über D2XX.dll ansprechen


von Ralf (Gast)


Lesenswert?

Hallo,

ich versuche gerade mit VB6, genauer mit VBA:-) einemk FTDI Chip 
Informationen auszulesen.

Zunächst erstelle ich mit "FT_CreateDeviceInfoList" eine Device Liste. 
Das funktioniert auch, denn nach dem Funktionsaufruf enthält die 
Variable lpdwNumDevs die Summer der angeschlossenen Devices.

Über die Funktionen FT_GetDeviceInfoList FT_GetDeviceInfoDetail kann ich 
keinerlei Informationen auslesen. Der Rückgabewert der Funktionen 0, 
also "OK".
Kann mir vielleicht jemand einen Tipp geben?

Hier der Code:
1
Private Declare Function FT_CreateDeviceInfoList Lib "FTD2XX.DLL" (ByRef lpdwNumDevs As Long) As Long
2
3
Private Declare Function FT_GetDeviceInfoList Lib "FTD2XX.DLL" (ByRef FT_DEVICE_LIST_INFO_NODE As DeviceInfo, ByRef lpdwNumDevs As Long) As Long
4
5
Private Declare Function FT_GetDeviceInfoDetail Lib "FTD2XX.DLL" (ByVal dwIndex As Long, ByRef lpdwFlags As Long, ByRef lpdwType As Long, ByRef lpdwID As Long, ByRef lpdwLocId As Long, ByRef pcSerialNumber As String, ByRef pcDescription As String, ByRef fthandle As Long) As Long
6
7
8
9
Public Type DeviceInfo
10
11
    Flags As Long
12
    Type As Long
13
    ID As Long
14
    LocID As Long
15
    SerialNumber As String * 16
16
    Description As String * 64
17
    fthandle As Long
18
    
19
End Type
20
21
22
23
24
Public Sub run_application(ByVal hWnd As Long, ByVal uMsg As Long, _ByVal wParam As Long, ByVal lParam As Long)
25
26
Static lpdwNumDevs As Long
27
28
29
Dim FT_DEVICE_LIST_INFO_NODE(10) As DeviceInfo
30
31
Dim lpdwFlags As Long
32
Dim lpdwType As Long
33
Dim lpdwID As Long
34
Dim lpdwLocId As Long
35
Dim pcSerialNumber As String * 16
36
Dim pcDescription As String * 64
37
Dim fthandle As Long
38
Dim i AS Long
39
40
41
42
43
state_handler = FT_CreateDeviceInfoList(lpdwNumDevs)    
44
ActiveSheet.Cells(2, 2).Value = CStr(lpdwNumDevs)
45
46
47
48
state_handler = FT_GetDeviceInfoDetail(0, lpdwFlags, lpdwType, lpdwID, lpdwLocId, pcSerialNumber, pcDescription, fthandle)
49
ActiveSheet.Cells(2, 3).Value = pcDescription
50
51
52
i = 0
53
54
state_handler (FT_GetDeviceInfoDetail(i, FT_DEVICE_LIST_INFO_NODE(i).Flags, FT_DEVICE_LIST_INFO_NODE(i).Type, FT_DEVICE_LIST_INFO_NODE(i).ID, FT_DEVICE_LIST_INFO_NODE(i).LocID, FT_DEVICE_LIST_INFO_NODE(i).SerialNumber, FT_DEVICE_LIST_INFO_NODE(i).Description, FT_DEVICE_LIST_INFO_NODE(i).fthandle))
55
ActiveSheet.Cells(3, 3).Value = FT_DEVICE_LIST_INFO_NODE(i).Description
56
57
58
59
60
End Sub

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hast Du Dir mal die VB-Codebeispiele angesehen, die es von FTDI gibt?

http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/VB.htm

von Ralf (Gast)


Lesenswert?

Hallo,

ja habe ich. Diese Funktionen werden dort leider nicht verwendet.

Es gibt in der Doku zu der Funktion FT_GetDeviceInfoList() den folgenden 
Hinweis:

When programming in Visual Basic, LabVIEW or similar languages, 
FT_GetDeviceInfoDetail may be required instead of this function.

Daher habe ich es mit der FT_GetDeviceInfoDetail() probiert.


Eine Sache habe ich eben vergessen zu erwähnen. Wenn ich die Funktion 
FT_GetDeviceInfoList() aufrufe, dann enthält das erste Element von 
FT_DEVICE_LIST_INFO_NODE(0) die Informationen eines meiner drei Chips.
FT_DEVICE_LIST_INFO_NODE(1) & FT_DEVICE_LIST_INFO_NODE(2) sind leer, 
obwohl drei Devices angemeldet sind.

von Ralf (Gast)


Lesenswert?

Hallo,

das Thema hat sich erledigt. Ich habe meine Fehler gefunden!

Ich muss die beiden Strings pcSerialNumber pcDescription ByValue, nicht 
wie im oberen Beispiel ByReferenz, an die Funktion 
FT_GetDeviceInfoDetail() übergeben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.