AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Unterschiedliche Units für Debug und Release

Unterschiedliche Units für Debug und Release

Ein Thema von davtix · begonnen am 31. Okt 2021 · letzter Beitrag vom 31. Okt 2021
Antwort Antwort
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Unterschiedliche Units für Debug und Release

  Alt 31. Okt 2021, 11:46
Kennt jemand einen Weg wie unterschiedliche Units für das Release und Debug zu händeln ist?


Zur erklärung:

Ich habe einen Updater geschrieben in dem eine Unit vorkommt die unterschiedliche Werte (bsp.pfadangaben) zum auslesen hat.
Dieses Projekt wird in das jeweilige Hauptprojekt(app), der upzudatenden Application, neu erstellt. (updater für proj X)
Beide Projecte sind bis auf eine Unit identisch. -> variable_datas.pas

Jedes Hauptprojekt(app) erhält somit seinen eigenen (updater für proj X) mit nur unterschiedlicher variable_datas.pas.
Per Knöpfchen im Updater werden die Quellcodedateien, ausser die variable_datas.pas, vom Updater zu (updater für proj X) überschrieben, schreibgeschützt und das (updater für proj X) Projekt mit eigener variable_datas.pas compiliert.

Struktur:

Updater
-- (updater für proj X) mit eigener variable_datas.pas
-- (updater für proj Y) mit eigener variable_datas.pas
-- (updater für proj Z) mit eigener variable_datas.pas


Hauptprojekt(app X )
-- -- (updater für proj X) mit eigener variable_datas.pas
Hauptprojekt(app Y )
-- -- (updater für proj Y) mit eigener variable_datas.pas
Hauptprojekt(app Z )
-- -- (updater für proj Z) mit eigener variable_datas.pas


Ausschnitt Updater variable_datas.pas

Delphi-Quellcode:
unit variable_datas;

interface

  function give_DATA( s1, s2 :string; i1, i2 :integer ):string;

  //umgelenkte proceduren und functionen -- diese codes sind nur für den HAUPTUPDATER verfügbar
  procedure refresh_UPDATERcodes_Link( func, selected_entry, sender_button_number : string);


implementation
uses unit1;

function give_DATA( s1, s2 :string; i1, i2 :integer ):string;
begin
  reult := 'hier mein wert nur für updater'
end;


refresh_UPDATERcodes( func, selected_entry, sender_button_number );
begin
  dateien vergleichen, schreibschutz raus, dateien kopieren, schreibschutz rein, projektdatei suchen, compilieren
end;

procedure refresh_UPDATERcodes_Link( func, selected_entry, sender_button_number : string);
begin
  refresh_UPDATERcodes( func, selected_entry, sender_button_number );
end;


end.

Ausschnitt updater für proj Y variable_datas.pas

Delphi-Quellcode:
unit variable_datas;

interface

  function give_DATA( s1, s2 :string; i1, i2 :integer ):string;

  //umgelenkte proceduren und functionen -- diese codes sind nur für den HAUPTUPDATER verfügbar
  procedure refresh_UPDATERcodes_Link( func, selected_entry, sender_button_number : string);


implementation
uses unit1;

function give_DATA( s1, s2 :string; i1, i2 :integer ):string;
begin
  reult := 'hier mein wert nur für updater für proj Y'
end;




procedure refresh_UPDATERcodes_Link( func, selected_entry, sender_button_number : string);
begin
  //nix
end;


end.


Etwas ähnliches schwebt mir nun für die Debugversion und Releaseversion vor.
Codes die ich im Debugmodus brauche möchte ich im Releasemodus ins leere laufen lassen.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#2

AW: Unterschiedliche Units für Debug und Release

  Alt 31. Okt 2021, 12:01
Delphi-Quellcode:
{$IFDEF DEBUG}
uses MyDebugUnit;
{$ELSE}
uses MyReleaseUnit;
{$ENDIF}
oder auch
Delphi-Quellcode:
uses SomeUnit
{$IFDEF DEBUG}
, MyDebugUnit
{$ELSE}
, MyReleaseUnit
{$ENDIF}
, SomeOtherUnit;
Kann man natürlich auch alles in derselben Unit machen und dort nur die Funktionen unterschiedlich implementieren und in dieselben IFDEFs packen.

Oder denke ich zu einfach?

Grüße
Dalai
  Mit Zitat antworten Zitat
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Unterschiedliche Units für Debug und Release

  Alt 31. Okt 2021, 12:47
ging ja schnell

Hab n bissel rumgewürgt aber es scheinbar so hier hinbekommen.


Delphi-Quellcode:
  uses .. ..JvExExtCtrls, JvExtComponent, JvCaptionPanel,

    //unterschiedliche pas dateien im Debugmodus / releaseModus
   Release_codes {$IFDEF DEBUG} , Debug_codes {$ELSE}   {$ENDIF} ;
Delphi-Quellcode:
unit Release_codes;

interface


   function release_debug:string;


implementation


function release_debug:string;
begin

  result := 'kommt von a release unit'
end;

end.
Delphi-Quellcode:
unit Debug_codes;

interface

   function release_debug:string;


implementation


function release_debug:string;
begin

  result := 'kommt von a debug unit'
end;

end.

in der unit1 beim start dann ...
Delphi-Quellcode:
  //Form ausrichten
      Form1.Width := GetDPI(1200);
      Form1.Height := GetDPI(800);
      Form1.Left := Screen.Width - Form1.Width;
      Form1.Top := screen.Height - (screen.Height - screen.WorkAreaHeight) - form1.Height;


  tempS := release_debug;
  form1.Caption := tempS;

  exit;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Unterschiedliche Units für Debug und Release

  Alt 31. Okt 2021, 13:16
Durch das IFDEF wird ja schon quasi ausgeschlossen, dass die jeweiligen Units direkt in das Projekt aufgenommen werden, sondern lediglich über diese uses-Anweisung eingebunden werden.

In dem Fall lässt sich das auch ohne IFDEF realisieren, in dem man in den Build-Konfigurationen unterschiedliche Suchpfade einträgt und dort jeweils passende Units ablegt, die aber gleich heißen (hier z.B. codes.pas).

Natürlich sollte auch sichergestellt werden, dass der DCU-Ausgabepfad für Release und Debug unterschiedlich ist, was aber per Default mit .\$(Platform)\$(Config) ja schon gewährleistet wäre.

Das hätte den Vorteil, dass die verwendenden Units beim Wechsel zwischen Debug und Release nicht jedes mal neu übersetzt werden müssen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#5

AW: Unterschiedliche Units für Debug und Release

  Alt 31. Okt 2021, 13:19
Delphi-Quellcode:
  uses .. ..JvExExtCtrls, JvExtComponent, JvCaptionPanel,

    //unterschiedliche pas dateien im Debugmodus / releaseModus
   Release_codes {$IFDEF DEBUG} , Debug_codes {$ELSE}   {$ENDIF} ;
Das würde ich so nicht machen, weil du dann im DEBUG beide Units einbindest und es von der Reihenfolge der Einbindung abhängt, aus welcher Unit die Funktion gerufen wird. Anders ausgedrückt: Würde das IFDEF vor dem Release_codes stehen, würde immer Release_codes.release_debug gerufen werden, weil das zuletzt eingebundene gewinnt - jedenfalls solange man bei solchen Mehrdeutigkeiten nicht explizit die Unit angibt.

Besser ist
Delphi-Quellcode:
  uses .. ..JvExExtCtrls, JvExtComponent, JvCaptionPanel

    //unterschiedliche pas dateien im Debugmodus / releaseModus
    {$IFDEF DEBUG} , Debug_codes {$ELSE}, Release_codes {$ENDIF} ;

[EDIT]
Ich ziehe IFDEFs den Suchpfaden vor, weil beim Lesen des reinen Codes sofort klar wird, aus welcher Unit der Code kommt. Bei Verwendung von Suchpfaden muss man sich selbige ebenfalls anschauen, um einen Gesamtüberblick des Codes zu bekommen. Gerade ohne IDE ist das eher lästig, in der .dproj rumzugraben.
[/EDIT]

Grüße
Dalai

Geändert von Dalai (31. Okt 2021 um 13:49 Uhr)
  Mit Zitat antworten Zitat
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Unterschiedliche Units für Debug und Release

  Alt 31. Okt 2021, 13:36
@Uwe Raabe , das habe ich schon probiert jedoch ohne erfolg.


@Dalai Ich hab mich schon gewundert warum die IFDEF danach stehen.

so richtig versteh ich das nicht. Es funktioniert nur wenn ich das Komma nach JvCaptionPanel wegnehme.
{$IFDEF DEBUG} hat doch aber nichts mit dem CaptionPanel zu tun ???

Delphi-Quellcode:
  uses ..

 JvExExtCtrls, JvExtComponent, JvCaptionPanel

    //unterschiedliche pas dateien im Debugmodus / releaseModus
   {$IFDEF DEBUG} , Codes_Debug {$ELSE}, Codes_Release {$ENDIF} ;
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#7

AW: Unterschiedliche Units für Debug und Release

  Alt 31. Okt 2021, 13:49
so richtig versteh ich das nicht. Es funktioniert nur wenn ich das Komma nach JvCaptionPanel wegnehme.
Da hast du vollkommen recht, werde das in obigem Beitrag noch korrigieren.

Zitat:
{$IFDEF DEBUG} hat doch aber nichts mit dem CaptionPanel zu tun ???
Hat es nicht, aber die Syntax der uses-Klausel muss stimmen. Nur genau ein Komma zwischen zwei Units.

Grüße
Dalai
  Mit Zitat antworten Zitat
davtix

Registriert seit: 29. Mai 2003
Ort: Berlin
87 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Unterschiedliche Units für Debug und Release

  Alt 31. Okt 2021, 13:59
Ahhh , die Syntax beginnt mit nem Komma oder vor dem Komma steht {} .
Hab ichs jetzt verstanden ?


Auf jedem danke ich dir.
Das werde ich auch für meine anderen Projekte nutzen in dem Tonnen von Test-Proceduren stehen. Die Anwendungen sind dann dementsprechend gross.
Die Codes so sauberer zu halten und die Stunden zur Quellcodesäuberung sind damit hinfällig.

Angenehmen Sonntag dir
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Unterschiedliche Units für Debug und Release

  Alt 31. Okt 2021, 15:39
@Uwe Raabe , das habe ich schon probiert jedoch ohne erfolg.
Na sowas! Anbei ein Testprojekt mit dem es funktioniert.
Angehängte Dateien
Dateityp: zip TestSubFolder.zip (5,7 KB, 3x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:14 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