AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

Ein Thema von tdeck · begonnen am 6. Okt 2022 · letzter Beitrag vom 7. Okt 2022
Antwort Antwort
tdeck

Registriert seit: 26. Jun 2006
Ort: Obertshausen
69 Beiträge
 
Delphi 11 Alexandria
 
#1

Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 6. Okt 2022, 22:35
Hallo Leute,

ich glaube ich stehe gerade auf dem Schlauch. Ich entwickle im Moment eine APP für Windows und Android, die bei beiden Geräten die USB-Schnittstelle nutzt. Unter Windows und unter Android habe ich bereits meine USB-Funktionen am laufen. Jetzt bringe ich gerade die beiden verschiedenen Treiber zusammen in den Code und möchte über die Compiler-Direktiven "{$ifdef MSWINDOWS}" / "{$endif MSWINDOWS}" und "{$ifdef ANDROID}" / "{$endif ANDROID}" den entsprechenden USB-Treiber nutzen.

Bei Fastreport nutze ich diese Funktion schon seit einiger Zeit ohne Probleme.
Ich nutze den USB-Treiber 'libusb0.dll", die Funktionen und die DLL-Aufrufe habe ich in der libusb.pas Unit.

In meiner Main-Unit habe ich die 'uses' so angepasst:
Code:
  {$ifdef MSWINDOWS} // Nur bei Windows
  ,FMX.frxClass
  ,FMX.Ani
  ,libusb   // erzeugt beim übersetzen unter Android trotzdem einen Fehler
  {$endif MSWINDOWS}
  ;
Wenn ich jetzt das Zielsystem Android auswähle, sollte doch die "libusb.pas" eigentlich ignoriert werden, aber scheinbar nicht.
Ich erhalte einen Fehler:
Code:
[DCC Fehler] E2597 C:\Users\Public\Documents\Embarcadero\Studio\22.0\CatalogRepository\AndroidNDK-21-22.0.44500.8973\android-ndk-r21\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-ld.exe: error: cannot find -lusb0
[DCC Fataler Fehler] F2588 Linker-Fehlercode: 1 ($00000001)
Diesen erhalte ich auch, wenn ich in den "uses" die "libusb" entferne, erst wenn ich die libusb.pas aus dem Projekt entferne ist diese Meldung ebenfalls weg. Also schließt der Compiler für Android trotz Compiler-Direktive diese Datei mit ein.

Kann man das irgendwie verhindern?

Gruß
Thorsten
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.433 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 6. Okt 2022, 23:04
erst wenn ich die libusb.pas aus dem Projekt entferne ist diese Meldung ebenfalls weg. Also schließt der Compiler für Android trotz Compiler-Direktive diese Datei mit ein.
Alles was direkt im Projekt aufgenommen ist, wird auch compiliert, weil es in der DPR steht. Kann eine Unit nicht für alle Zielplattformen compiliert werden, darf sie nicht in die DPR (außer über IFDEF, aber davon würde ich abraten).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.019 Beiträge
 
Delphi 12 Athens
 
#3

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 6. Okt 2022, 23:06
Das IFDEF hast du nur in deiner PAS,
aber zusätzlich diese Unit auch in der Projekt-Verwaltung?

Strg+V, bzw im Kontext-Menü der Projektverwaltung, für deine EXE, auf "Quelltext anzeigen" und dann ... nja, wirst schon sehn.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
tdeck

Registriert seit: 26. Jun 2006
Ort: Obertshausen
69 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 7. Okt 2022, 01:59
Das IFDEF hast du nur in deiner PAS,
aber zusätzlich diese Unit auch in der Projekt-Verwaltung?
Hallo himitsu,

naja, ich habe das gerne da drinnen wegen der Übersicht und dem schnellen zugriff aus der Projektgruppe.

Strg+V, bzw im Kontext-Menü der Projektverwaltung, für deine EXE, auf "Quelltext anzeigen" und dann ... nja, wirst schon sehn.
Danke. Das wars

Code:
...
  {$ifdef MSWINDOWS} // Nur bei Windows
     LibUSB in 'LibUSB.pas',
  {$endif MSWINDOWS}...
Im Quelltext eingefügt funktioniert. Ich dachte solange ich es nicht als "Use" in meiner Unit aufrufe wird es ignoriert, habe dabei aber den Projektquelltext vergessen.

Alles was direkt im Projekt aufgenommen ist, wird auch compiliert, weil es in der DPR steht. Kann eine Unit nicht für alle Zielplattformen compiliert werden, darf sie nicht in die DPR (außer über IFDEF, aber davon würde ich abraten).
@Uwe Raabe;
Darf ich fragen warum Du von der Nutzung über IFDEF abrätst?

Thorsten
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 7. Okt 2022, 07:12
Darf ich fragen warum Du von der Nutzung über IFDEF abrätst?Thorsten
Nicht generell, nur nicht in der .dpr Datei weil das oftmals Fehler verursachen kann (neue Dinge werden falsch eingefügt bzw wenn man was entfernt kann was kaputt gehen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.433 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 7. Okt 2022, 08:59
Exakt! Das harmloseste wäre ein Entfernen des IFDEF beim nächsten Hinzufügen einer neuen Unit zum Projekt oder das Entfernen einer bestehenden. Das merkst du direkt beim Compilieren. Es kann aber auch die ganze Uses-Clause durcheinandergebracht werden.

Das muss natürlich nicht (immer) passieren, aber grundsätzlich führen manuelle Eingriffe in die DPR zu einem fragilen System, da laut Lesart von Embarcadero die DPR der IDE vorbehalten ist und vom Anwender nur in Ausnahmefällen manipuliert werden soll:
Zitat:
Project files are generated and maintained automatically by the IDE, and it is seldom necessary to edit them manually.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.019 Beiträge
 
Delphi 12 Athens
 
#7

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 7. Okt 2022, 10:06
jupp, die DPR/DPK werden teilweise vom Projektmanager umgeschrieben.
> Uses, Containts, die Compiler-Defines

Und die Units mit IN, sind jene, welche im Projektmanager angezeigt werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
tdeck

Registriert seit: 26. Jun 2006
Ort: Obertshausen
69 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 7. Okt 2022, 22:13
jupp, die DPR/DPK werden teilweise vom Projektmanager umgeschrieben.
> Uses, Containts, die Compiler-Defines

Und die Units mit IN, sind jene, welche im Projektmanager angezeigt werden.
OK, aber dieses Problem habe ich ja ebenfalls wenn ich IFDEF in den normalen USES meiner Units nutze. Wenn ich eine Komponente nachträglich hinzufüge oder lösche komme Delphi damit sowieso nicht klar.

Hätte da natürlich mal Embarcadero ordentliche Arbeit gemacht, so wie bei anderen Compilern, dann könnte man je nach Zielsystem die Units einzeln einbinden oder eben nicht.
Das ist das gleiche Thema wie schon seit mehr als einem Jahrzehnt, Embarcadero bekommt es nicht richtig hin den Desktop ordentlich zu speichern oder die Fenster über mehr als einem Monitor angeordnet zu lassen. Wahrscheinlich arbeiten die Entwickler bei Embarcadero immer nur auf einem Monitor . Ich arbeite sonst sehr viel mit einem Pascal Compiler für die ATMEGA uC Serie (AVRco) und nutze da das UEStudio mit UltraEdit. Da sollte sich mal Embarcadero so einiges abschauen.

Wisst ihr ob ich innerhalb einer Projektgruppe mehrere DPRs mit den selben Units anlegen und verwalten kann? Oder mault da Delphi wenn diese Datei innerhalb einer anderen DPR geändert wurde? Dann könnte man ja eine DPR für Windows und eine für Android anlegen und entsprechende Dateien dort hinterlegen. UEStdio kommt mit sowas klar, die registrieren eine Änderung und laden diese nach und fertig.

Thorsten
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.019 Beiträge
 
Delphi 12 Athens
 
#9

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 7. Okt 2022, 22:16
Du kannst auch einen Ultramegawidescreen benutzen.
Ist der eine Monitor so breit wie zwei oder drei Normale, hast du auch keine Probleme.


Pro Projekt müssen Unit-Namen eindeutig sein.

In mehreren Projekten die selbe Unit oder unterschiedliche Units mit gleichem Namen (unterschiedliche Verzeichnisse) sind möglich.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Okt 2022 um 22:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.433 Beiträge
 
Delphi 12 Athens
 
#10

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas

  Alt 7. Okt 2022, 22:22
Wisst ihr ob ich innerhalb einer Projektgruppe mehrere DPRs mit den selben Units anlegen und verwalten kann? Oder mault da Delphi wenn diese Datei innerhalb einer anderen DPR geändert wurde? Dann könnte man ja eine DPR für Windows und eine für Android anlegen und entsprechende Dateien dort hinterlegen.
Kannst du schon und die IDE kommt damit auch ganz gut klar. Aber das wird für dich eher unhandlich, wenn du eine neue, gemeinsam benutzte Unit dann in jedem Projekt einzeln hinzufügen oder entfernen musst.

Ich empfehle dir, in diesem Fall auf deinen Wunsch
naja, ich habe das gerne da drinnen wegen der Übersicht und dem schnellen zugriff aus der Projektgruppe.
vielleicht etwas zurückschraubst, bevor du da in etwas hineingerätst, was dir am Ende mehr Arbeit macht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz