Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Testversion mit Bedingter Compilierung? (https://www.delphipraxis.net/109613-testversion-mit-bedingter-compilierung.html)

Ares 4. Mär 2008 15:47


Testversion mit Bedingter Compilierung?
 
Hallo!

Ich will von einem Programm eine Testversion mit eingeschränktem Funktionsumfang erstellten. Die eingeschränkten funktionen sollen dabei in der Testversion nicht enthalten sein, damit diese nicht per Crack, etc. freigeschaltet werden können:

Delphi-Quellcode:
{$DEFINE vollversion}

...

{$IFDEF vollversion}
  TuWasTolles();
{$ELSEIF}
  ShowMessage('Nur in Vollversion');
{ENDIF}
Da das Programm aus etlichen Dateien besteht habe ich "Vollversion Ja/Nein" ({$DEFINE vollversion}) in einer zentralen Datei definiert und binde diese in alle Dateien des Projektes ein:

Delphi-Quellcode:
{$I info.inc}
Soweit funktioniert das prima, ABER:
Ich verwende in dem Programm auch eigene Funktionssammlungen, Classen, etc. die ich auch für andere Projekte benutze. Diese Programmteile sollen ebenfalls je nach Voll-/Testversion anders arbeiten. Dabei will ich in jedem Projekt angeben können, ob dieses als Voll- oder als Testversion erstellt werden soll.

Also:
Delphi-Quellcode:
unit AllgemeineFunktionen.pas
...
procedure MachWasTolles();
begin
  {$IFDEF vollversion}
    TuWasTolles();
  {$ELSEIF}
    MachNichts();
  {ENDIF} 
end;
Delphi-Quellcode:
unit ProgrammA.pas
{$DEFINE vollversion}
...
uses AllgemeineFunktionen;
...
procedure Arbeite();
begin
  MachWasTolles();
end;
Delphi-Quellcode:
unit ProgrammB.pas
{$DEFINE testversion}
...
uses AllgemeineFunktionen;
...
procedure Arbeite();
begin
  MachWasTolles();
end;
Wie schaffe ich es hier, dass in ProgrammA MachWasTolles() mit alles Funktionen compiliert wird und in ProgrammB ohne die Vollversions-Funktionen?

Habt ihr hierfür eine Idee?

Besten Dank
Ares

TBx 4. Mär 2008 16:03

Re: Testversion mit Bedingter Compilierung?
 
Leg Deinen Define TESTVERSION in den Projektoptionen an, dann gilt dieser projektweit.

Hope it helps

Ares 4. Mär 2008 16:32

Re: Testversion mit Bedingter Compilierung?
 
Danke, das werde ich mal versuchen.

Weißt du vielleich schon, ob dass dann nur für Dateien gilt die dem Projekt hinzugefügt wurden oder auch für solche die nur per uses Referenziert sind?

In welcher Datei speichert Delphi die Projekt-Optionen ab? Dann könnte ich mir ggf. ein Tool zum schnellen Umschalten basteln.

TBx 4. Mär 2008 16:45

Re: Testversion mit Bedingter Compilierung?
 
Delphi speichert das in der .cfg Datei ab. Liegt im Projektverzeichnis und heißt bis auf die andere Extension wie das Projekt.
Ob nur referenzierte Units, die aber nicht ins Projekt eingefügt wurden, von dieser Einstellung auch betroffen sind, weiß ich nicht.

Ein Tip noch zu bedingter Kompilierung: Stell sicher, dass auch wirklich alle Units neu kompiliert werden, da sonst u. U. DCUs eingelint werden, die zuvor mit einem nicht zum Projekt passenden Define kompiliert wurden.

Hope it helps

Muetze1 4. Mär 2008 17:09

Re: Testversion mit Bedingter Compilierung?
 
Zitat:

Zitat von onlinekater
Delphi speichert das in der .cfg Datei ab. Liegt im Projektverzeichnis und heißt bis auf die andere Extension wie das Projekt.

Falsch. Dort wird es unter anderem abgelegt, aber das ist nur ein Nebenprodukt und wird soweit nur vom Kommandozeilen Pascal Compiler benutzt. Die Optionen stehen im projectname.dof (bis Delphi 7) und danach in der projectname.bdsproj.

TBx 4. Mär 2008 17:15

Re: Testversion mit Bedingter Compilierung?
 
Zitat:

Zitat von Muetze1
Dort wird es unter anderem abgelegt, aber das ist nur ein Nebenprodukt

Hupps, da hast DU allerdings recht. Bin in dem Fall auch nur durch den dcc auf die cfg-Datei gekommen :gruebel:

Ares 5. Mär 2008 10:44

Re: Testversion mit Bedingter Compilierung?
 
Also die Änderung der Optionen wirkt sich auf ALLE Dateien aus die verwendet werden. Egal ob diese zum Projekt gehören oder nur per Uses Referenziert wurden. Soweit so gut.
Besten Dank!

himitsu 5. Mär 2008 11:17

Re: Testversion mit Bedingter Compilierung?
 
du könntest in den Funktionssammlungen auch mehrere Versionen der Funktionen bereitstellen

Funktion ABC;
Funktion ABC_Test;
welche dann passend von deinem Programm aus aufgerufen werden.

wenn dann das DEFINE in einer Include-Datei im Programmverzeichnis liegt und diese .INC geändert wird, dann werden automatisch alle davon abhängigen Daeien neu kompiliert.
und Da so automatisch die anderen Funktionen in der Sammlungen verwendet werden, wäre ein neukompilieren der Smmlung unnötig.



und wie schon gesagt, bei der Variante mit mit DEFINE in den Projektoptionen ... immer schön alles neu erzeugen lassen, damit sich diese Option auch überall auswirkt.



nja und als Non-Plus-Ultra ... mir fällt zwar grad nicht der Name ein, aber man kann Delphi(die IDE) erweitern und z.B. über einen Code vorm Compilieren die alten DCUs löschen lassen,
dann würde bei DEFINE in Projektoptionen auch immer das aktuelle DEFINe verwendet :angel:


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