AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FMX - Falsches Unit Format / $IFDEF

Ein Thema von Int3g3r · begonnen am 25. Aug 2020 · letzter Beitrag vom 26. Aug 2020
Antwort Antwort
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: FMX - Falsches Unit Format / $IFDEF

  Alt 25. Aug 2020, 16:11
Danke euch für die Hilfe!

Delphi-Quellcode:
{$IFDEF MSWINDOWS}
{$IF Defined(MSWINDOWS)}
Bewirken diese zwei Zeilen nicht das selbe ? Was ist hier der Unterschied ?

Bzw. im Header sollten die genutzten DEFINES enthalten sein
Werden die DEFINES nicht automatisch gesetzt ?
Kannst du mir ein Beispiel machen wie man diese setzt ?

Gruss Int3g3r

Geändert von Int3g3r (25. Aug 2020 um 16:14 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.167 Beiträge
 
Delphi 12 Athens
 
#2

AW: FMX - Falsches Unit Format / $IFDEF

  Alt 25. Aug 2020, 16:16
Bewirken diese zwei Zeilen nicht das selbe ? Was ist hier der Unterschied ?
Im Prinzip ja,
aber $IF hat noch den Vorteil das es ein

{$ELSEIF Defined(ANDROID)} erlaubt.

So kann man dan eine Art case/switch aufbauen, was dann relativ übersichtlich ist.

Geändert von Rollo62 (25. Aug 2020 um 16:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: FMX - Falsches Unit Format / $IFDEF

  Alt 25. Aug 2020, 20:03
Ja, es gibt ein paar vordefinierte Compiler-DEFINEs und -Konstanten.
http://docwiki.embarcadero.com/RADSt...ation_(Delphi)
Aber man kann auch selbst Welche definieren.
DEBUG ist z.B. kein Define des Compilers, sondern kommt aus den Projektoptionen. Das findest in den "Bedingungen" (im Deutschen) des Debug-Profiles.
Und kanns auch global im Projekt Eingene dort einfügen, zusätzlich zu den DEFINE und UNDEF im Code.


Die Conditional-Statements haben ein paar Vorzeile, gegen über den einfachen IFDEF und IFNDEF ... erstmal übersieht man einfach das N , in der Mitte, gegenüber einem alleinstehenden NOT. Und man kann nicht jeweils nur "ein" DEFINE prüfen.

Vor allem das ELSE-IF und auch NOT, AND oder OR können genutzt werden.
Da kann man "echte" Konstanten (keine typisierten Konstanten), Typen und ein paar Compiler-Funktionen verwenden. Defined, Declared, SizeOf


z.B. {$IF not Declared(irgendwas)} für Ersatzcode einer Konstante, Funktion oder Typ.
oder {$IF CompilerVersion < 30.0} anstatt {$IFDEF VER290} und jeden einzelnen Vorfahren zu prüfen.

Stell dir mal vor du müsstest das nur nur mit mehrfach verschachtelten IFDEF/IFNDEF bauen. (Original-Code aus'm Delphi)
Delphi-Quellcode:
{$IFNDEF PC_MAPPED_EXCEPTIONS}
  {$IF defined(ANDROID)}
    {$DEFINE ZCX_BASED_EXCEPTIONS}
  {$ELSEIF defined(MACOS)}
    {$IF defined(CPUARM32)}
      {$DEFINE SJLJ_BASED_EXCEPTIONS}
    {$ELSEIF defined(CPUARM64)}
      {$DEFINE ZCX_BASED_EXCEPTIONS_MACOS}
    {$ELSEIF defined(CPUX64)}
      {$DEFINE ZCX_BASED_EXCEPTIONS_MACOS}
    {$ENDIF}
  {$ELSEIF defined(MSWINDOWS)}
    {$IFDEF EXTERNALLINKER}
      {$DEFINE ZCX_BASED_EXCEPTIONS}
    {$ELSE}
      {$IF defined(CPUX86)}
        {$DEFINE STACK_BASED_EXCEPTIONS}
      {$ELSEIF defined(CPUX64)}
        {$DEFINE TABLE_BASED_EXCEPTIONS}
      {$ELSE}
        {$MESSAGE ERROR 'Unknown platform'}
      {$ENDIF}
    {$ENDIF !EXTERNALLINKER}
  {$ELSEIF defined(LINUX)}
    {$IFDEF EXTERNALLINKER}
      {$DEFINE ZCX_BASED_EXCEPTIONS}
    {$ELSE}
      {$DEFINE PC_MAPPED_EXCEPTIONS}
    {$ENDIF}
  {$ELSE}
    {$MESSAGE ERROR 'Unknown platform'}
  {$ENDIF}
{$ENDIF !PC_MAPPED_EXCEPTIONS}
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Aug 2020 um 20:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#4

AW: FMX - Falsches Unit Format / $IFDEF

  Alt 26. Aug 2020, 05:42
Moin...
Zitat:
Ja, es gibt ein paar vordefinierte Compiler-DEFINEs und -Konstanten.
Klär mich mal auf... Was haben IFDEF´s mit dem Ablageort der DCU und dem Fehler zu tun?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: FMX - Falsches Unit Format / $IFDEF

  Alt 26. Aug 2020, 10:09
Wenn man die ändert, werden die nutzenden DCUs nicht neu kompiliert, wenn sie aus einer {$INCLUDE}, den Projektoptionen oder den Compiler-Parametern kommen.
Der Compiler erkennt keine Änderung in der DCU, gegenüber den PAS ... klar, da hat sich ja auch nichts verändert, in der PAS oder in abhängigen DCUs.

Würde eine Änderung an genutztem Compiler und DEFINES erkannt, dann wäre die DCU hier neu kompiliert worden und es gäbe keine Probleme, selbst wenn die DCUs für unterschiedliche Compiler/Options im selben Verzeichnis landen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Aug 2020 um 10:11 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.038 Beiträge
 
Delphi 12 Athens
 
#6

AW: FMX - Falsches Unit Format / $IFDEF

  Alt 25. Aug 2020, 19:36

Werden die DEFINES nicht automatisch gesetzt ?
Kannst du mir ein Beispiel machen wie man diese setzt ?

Gruss Int3g3r
Naja, du kannst auch selber defines definieren:

Delphi-Quellcode:
{$DEFINE MeinTollesDefine}

...

{$IFDEF MeinTollesDefine}
DoSomething;
{$ELSE}
DoSomethingElse;
{$ENDIF}
Beliebt ist dann auch solche Defines in Include Dateien (Textdateien mit Endung .inc) zu stecken
und diese Include Dateien in den entsprechenden Units wie folgt inkludieren:

{$I MeinInclude.inc}

Erst ab da gilt dann, was im Include steht, das das quasi an der Stelle der Unit eingefügt wird.
  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 03:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz