Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas (https://www.delphipraxis.net/211578-problem-mit-compiler-direktiven-fuer-ausgeklammerte-libusb-pas.html)

tdeck 6. Okt 2022 21:35

Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas
 
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

Uwe Raabe 6. Okt 2022 22:04

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

Zitat von tdeck (Beitrag 1512918)
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).

himitsu 6. Okt 2022 22:06

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas
 
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. :stupid:

tdeck 7. Okt 2022 00:59

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

Zitat von himitsu (Beitrag 1512921)
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.

Zitat:

Zitat von himitsu (Beitrag 1512921)
Strg+V, bzw im Kontext-Menü der Projektverwaltung, für deine EXE, auf "Quelltext anzeigen" und dann ... nja, wirst schon sehn. :stupid:

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.

Zitat:

Zitat von Uwe Raabe (Beitrag 1512920)
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

KodeZwerg 7. Okt 2022 06:12

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

Zitat von tdeck (Beitrag 1512923)
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)

Uwe Raabe 7. Okt 2022 07:59

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas
 
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.

himitsu 7. Okt 2022 09:06

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas
 
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.

tdeck 7. Okt 2022 21:13

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

Zitat von himitsu (Beitrag 1512931)
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

himitsu 7. Okt 2022 21:16

AW: Problem mit Compiler-Direktiven für ausgeklammerte libusb.pas
 
Du kannst auch einen Ultramegawidescreen benutzen.
Ist der eine Monitor so breit wie zwei oder drei Normale, hast du auch keine Probleme. :zwinker:


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.

Uwe Raabe 7. Okt 2022 21:22

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

Zitat von tdeck (Beitrag 1512970)
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
Zitat:

Zitat von tdeck (Beitrag 1512923)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 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