Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: verschiedene Klassen via Compiler directive erzeugen

  Alt 25. Mai 2017, 23:28
Compile oder Build?

Der Compiler erzeugt von sich aus Units nur neu, wenn sie sich verändert haben und das tun sie hier nicht, also mußt DU explizit zwangsweise neu compilieren, also "alles neu erzeugen".
Ganz fies, wenn man solche DEFINES in den Projektoptionen umstellt, wo sich an den Code-Dateien dann garnichts ändert.

Aber sicher, dass dein Code so funktioniert?

$IFDEF prüft nur DEFINES, aber du willst CONDITIONAL-EXPRESSIONS auswerten und das macht man mit $IF.
Wenn der Parser echt doof ist und sowas durch lässt, dann könnten deine DEFINEs "define(encrypt_full)" und "define(encrypt_tiny)" heißen, anstatt "encrypt_full" und "encrypt_tiny".
Delphi-Quellcode:
{$IF define(encrypt_full)}
  FLicense := Tlicense.create;
...
Oder mmal so probieren.
Delphi-Quellcode:
// Unit 1 oder Include 1
const
  encrypt_full = False;
  encrypt_tiny = True;

// Unit 2
{$IF encrypt_full}
  FLicense := TLicense.Create;
{$ELSEIF encrypt_tiny}
  FLicense := TLicenseSimple.Create;
{$ELSE}
  FLicense := TLicenseMock.Create;
{$IFEND}
Beim Umstellen ändert sich Unit 1, wird neu kompiliert,
und mit etwas Glück erzwingt das auch ein Neukompilieren von Unit 2.

So muß es auf jeden Fall neu kompilieren und die Code-Optimierung müsste schlau genug sein und alle nichtbenötigten Zweige entfernen. (bei "echten" Konstanten)
Delphi-Quellcode:
// Unit 2
IF encrypt_full THEN
  FLicense := TLicense.Create
ELSE IF encrypt_tiny THEN
  FLicense := TLicenseSimple.Create
ELSE
  FLicense := TLicenseMock.Create;
Was durch typisierte Konstanten passiert, könnte noch interessant sein, da das in Wirklichkeit nur "schreibgeschützte" Variablen sind, deren eine Speicherstelle man dennoch verändern "könnte".
Delphi-Quellcode:
const
  encrypt_full: Boolean = False;
  encrypt_tiny: Boolean = True;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Mai 2017 um 23:36 Uhr)
  Mit Zitat antworten Zitat