Autor |
Beitrag |
Geri
      
Beiträge: 78
XP
RAD Studio XE pro
|
Verfasst: Do 30.06.11 12:35
Hallo zusammen
Ich habe DelphiLibUSB-WIN32 heruntergeladen und wenn ich das Beispielprogramm, welches die angeschlossene USB-Geräte anzeigen soll, mit Delphi 2005 personal compilere und ausführe, dann funktioniertes einwandfrei.
Wenn ich nun mit Delphi XE das Gleiche mache, dann wird kein Gerät gefunden.
Die Compilereinstellungen habe ich verglichen. Diese müssten passen.
Habt ihr vielleicht eine Idee an was es noch liegen könnte?
Beste Grüsse
Geri
|
|
guinnes
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Do 30.06.11 13:05
Unter Delphi 2005 sind Strings Ansi-Strings, unter XE sind Strings Unicode-Strings, das dürfte der Grund sein
|
|
Geri 
      
Beiträge: 78
XP
RAD Studio XE pro
|
Verfasst: Do 30.06.11 15:19
Vielen Dank
Dem werde ich mal nachgehen und morgen dann berichten. Mit D2007 funktioniert das Programm übrigens auch noch.
Beste Grüsse
Geri
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 30.06.11 16:15
Bis Delphi 2007 waren Strings auch AnsiStrings und ab Delphi 2009 UnicodeStrings, das ist genau die Grenze.
|
|
Geri 
      
Beiträge: 78
XP
RAD Studio XE pro
|
Verfasst: Fr 01.07.11 08:49
Hallo zusammen
Zuerst nochmals Danke für eure schnelle Hilfe!
Also ich habe nun weitergemacht und momentan habe ich das Gefühl, das Problem liegt schon vor der String-Abfrage.
Der Code meines Beispiels sieht so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| var bus: pusb_bus; dev: pusb_device; udev: pusb_dev_handle;
begin usb_init; myEndPoint:=5;
usb_find_busses; usb_find_devices; bus := usb_get_busses; Writeln('bus/device idVendor/idProduct'); while Assigned(bus) do begin dev := bus^.devices; while Assigned(dev) do begin writeln(bus^.dirname, '/', dev^.filename, ' ', '0x' + IntToHex(dev^.descriptor.idVendor, 4), '/', '0x' + IntToHex(dev^.descriptor.idProduct, 4)); |
die Variable bus weist auf einen gültigen Zeiger
Die Varialbe dev liefert aber bereits Nil. Sie ist vom Typ pusb_device mit folgender Struktur. Sie bleibt aber Nil, bei Delphi 2005 resp 2007 nicht.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| const LIBUSB_PATH_MAX = 512; type pusb_device = ^usb_device; pusb_bus = ^usb_bus;
usb_device = packed record next, prev: pusb_device; filename: packed array [0..LIBUSB_PATH_MAX-1] of char; bus: pusb_bus; descriptor: usb_device_descriptor; config: PArray_usb_config_descriptor;
dev: pointer; end; |
Alle Funktionen sind aus einer DLL.
Danke für Eure Tipps im Voraus und best Grüsse
Geri
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 01.07.11 09:28
|
|
Geri 
      
Beiträge: 78
XP
RAD Studio XE pro
|
Verfasst: Fr 01.07.11 09:56
Vielen Dank dür deine Hilfe, Sebastian!
Wahrscheinlich habe ich ein Brett vor dem Kopf. Das Problem tritt aber schon in Zeile 18 auf. Dort geht es noch gar nicht um die Stringabfrage...?
Ich habe die Typen char und pChar nun geändert. Eine Verbesserung ist mir allerdings aufgefallen.
Änderung
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| usb_bus = packed record next, prev: pusb_bus; dirname: packed array [0..LIBUSB_PATH_MAX-1] of Ansichar; devices: pusb_device; location: longint; end; |
Wenn ich debugge, dann sehe ich, dass die Variable bus^.dirname nun den Namen bus - \0 enthält. Bei der vorherigen Version standen cryptische Zeichen drin.
Trotzdem zeigt aber die Variable devices eben immer noch auf Nil
Beste Grüsse
Geri
|
|
Geri 
      
Beiträge: 78
XP
RAD Studio XE pro
|
Verfasst: Fr 01.07.11 17:45
Hallo zusammen
Als es funktioniert nun. Das Problem lag, wie guinnes und Sebastian gemeint hanben, an der Definition der Strings in der libusb.pas.
Ich hatte zuvor beim Debuggen den Fehler gemacht, dass ich beim Betrachten der Variablen bus^.device den Cursor auf device hatte:) Richtig wäre auf bus gewesen
Für all jene, dies es interessiert oder vielleicht mal das gleiche Problem haben die notwendigen Änderungen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| usb_device = packed record next, prev: pusb_device; filename: packed array [0..LIBUSB_PATH_MAX-1] of Ansichar; bus: pusb_bus; descriptor: usb_device_descriptor; config: PArray_usb_config_descriptor;
dev: pointer; end;
usb_bus = packed record next, prev: pusb_bus; dirname: packed array [0..LIBUSB_PATH_MAX-1] of Ansichar; devices: pusb_device; location: longint; end;
function usb_strerror: pAnsichar; stdcall; |
geändert.
Beste Grüsse und vielen Dank für eure schnelle Hilfe, super gemacht!!
Geri
[mod="Christian S."]Delphi-Tags repariert/mod]
|
|
|