| Autor | 
Beitrag | 
Geri 
        
 
Beiträge: 78 
 
XP 
RAD Studio XE pro 
 | 
Verfasst: Do 30.06.11 11: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 12: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 14: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: 19326 
Erhaltene Danke: 1749 
 
W11 x64 (Chrome, Edge) 
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus 
 | 
Verfasst: Do 30.06.11 15: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 07: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: 19326 
Erhaltene Danke: 1749 
 
W11 x64 (Chrome, Edge) 
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus 
 | 
Verfasst: Fr 01.07.11 08:28 
 
 | 
 | 
Geri   
        
 
Beiträge: 78 
 
XP 
RAD Studio XE pro 
 | 
Verfasst: Fr 01.07.11 08: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 16: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]  
 
 | 
 |