Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion einer Unit nur in bestimmten Projekten aktivieren (https://www.delphipraxis.net/98647-funktion-einer-unit-nur-bestimmten-projekten-aktivieren.html)

Angel4585 30. Aug 2007 14:08


Funktion einer Unit nur in bestimmten Projekten aktivieren
 
Hallo,

ich habe eine Unit in deren initialization Block ein Objekt erzeugt wird.

Diese unit binde ich in zwei verschiedenen Projekten ein.
Nun soll dieses Objekt aber nur in einem der beiden Projekten erzeugt werden, im anderen würde ich die Zeilen gerne einfach ausklammern, aber ohne jetzt die Unit verdoppeln zu müssen.
Geht das irgendwie mit Compilerdirektiven oder so?

mkinzler 30. Aug 2007 14:11

Re: Funktion einer Unit nur in bestimmten Projekten aktivier
 
Lagere den Code in eine Init-Funktion aus, welche du wenn gewünscht explizit aufrufst

Bernhard Geyer 30. Aug 2007 14:12

Re: Funktion einer Unit nur in bestimmten Projekten aktivier
 
Freilich

{$IFDEF MeinCompilerdef}
initialization
....
{$ENDIF MeinCompilerdef}

Angel4585 30. Aug 2007 14:13

Re: Funktion einer Unit nur in bestimmten Projekten aktivier
 
Zitat:

Zitat von Bernhard Geyer
Freilich

{$IFDEF MeinCompilerdef}
initialization
....
{$ENDIF MeinCompilerdef}

ja aber die muss ich in der selben unit definieren oder?
oder tuts das auch in der projekt-unit des jeweiligen projekts?

jim_raynor 30. Aug 2007 14:23

Re: Funktion einer Unit nur in bestimmten Projekten aktivier
 
Zitat:

Zitat von Angel4585
Zitat:

Zitat von Bernhard Geyer
Freilich

{$IFDEF MeinCompilerdef}
initialization
....
{$ENDIF MeinCompilerdef}

ja aber die muss ich in der selben unit definieren oder?
oder tuts das auch in der projekt-unit des jeweiligen projekts?

In den Projekt-Optionen kannst du auch Compiler-Bedingungen angegeben. Dort wäre dann der richtige Platz für sowas.

Allerdings hab ich die Erfahrung gemacht, dass es problematisch ist, da du dann beim öffnen des anderen Projekts erstmal das ganze Projekt aktualisieren solltest, damit diese Unit auch wirklich mit der Compiler-Bedingung kompiliert wird. Ansonsten passiert es ganz schnell, dass dir dann die initialization-Sektion fehlt, oder halt drin ist in dem Projekt, wo sie nicht drin sein soll. Besser wäre es also wirklich eine extra Init-Funktion zu nehmen oder versuchen den Teil, der nur in einem Projekt verwendet wird auszulagern.

Angel4585 30. Aug 2007 14:40

Re: Funktion einer Unit nur in bestimmten Projekten aktivier
 
Zitat:

Zitat von jim_raynor
Zitat:

Zitat von Angel4585
Zitat:

Zitat von Bernhard Geyer
Freilich

{$IFDEF MeinCompilerdef}
initialization
....
{$ENDIF MeinCompilerdef}

ja aber die muss ich in der selben unit definieren oder?
oder tuts das auch in der projekt-unit des jeweiligen projekts?

In den Projekt-Optionen kannst du auch Compiler-Bedingungen angegeben. Dort wäre dann der richtige Platz für sowas.

Allerdings hab ich die Erfahrung gemacht, dass es problematisch ist, da du dann beim öffnen des anderen Projekts erstmal das ganze Projekt aktualisieren solltest, damit diese Unit auch wirklich mit der Compiler-Bedingung kompiliert wird. Ansonsten passiert es ganz schnell, dass dir dann die initialization-Sektion fehlt, oder halt drin ist in dem Projekt, wo sie nicht drin sein soll. Besser wäre es also wirklich eine extra Init-Funktion zu nehmen oder versuchen den Teil, der nur in einem Projekt verwendet wird auszulagern.

Das mit den Projektoptionen war ein guter Tipp, funzt perfekt.
Wenn ich in der Projekt-Unit oben ein {DEFINE XYZ} reinmache klappt das nich :gruebel:

Phoenix 30. Aug 2007 14:43

Re: Funktion einer Unit nur in bestimmten Projekten aktivier
 
Zitat:

Zitat von Angel4585
Das mit den Projektoptionen war ein guter Tipp, funzt perfekt.
Wenn ich in der Projekt-Unit oben ein {DEFINE XYZ} reinmache klappt das nich :gruebel:

Das täte mich auch interessieren. Hatte letztens was ähnliches, und da hat das auch nur über die Optionen funktioniert. Woran liegt das?

Angel4585 30. Aug 2007 14:48

Re: Funktion einer Unit nur in bestimmten Projekten aktivier
 
ok jetz hab ich bestimmt en Virus!
Ich wollte das andere projekt compilieren bei dem das raus soll un dann wirds trotzdem rein gemacht, obwohl in den Projektoptionen von dem zweiten nix drin ist.

Angel4585 30. Aug 2007 14:51

Re: Funktion einer Unit nur in bestimmten Projekten aktivier
 
Zitat:

Zitat von jim_raynor
Allerdings hab ich die Erfahrung gemacht, dass es problematisch ist, da du dann beim öffnen des anderen Projekts erstmal das ganze Projekt aktualisieren solltest, damit diese Unit auch wirklich mit der Compiler-Bedingung kompiliert wird. Ansonsten passiert es ganz schnell, dass dir dann die initialization-Sektion fehlt, oder halt drin ist in dem Projekt, wo sie nicht drin sein soll. Besser wäre es also wirklich eine extra Init-Funktion zu nehmen oder versuchen den Teil, der nur in einem Projekt verwendet wird auszulagern.

man sollte immer alles lesen :mrgreen:

Bernhard Geyer 30. Aug 2007 15:02

Re: Funktion einer Unit nur in bestimmten Projekten aktivier
 
Zitat:

Zitat von Phoenix
Zitat:

Zitat von Angel4585
Das mit den Projektoptionen war ein guter Tipp, funzt perfekt.
Wenn ich in der Projekt-Unit oben ein {DEFINE XYZ} reinmache klappt das nich :gruebel:

Das täte mich auch interessieren. Hatte letztens was ähnliches, und da hat das auch nur über die Optionen funktioniert. Woran liegt das?

Optionen für das Projekt (über Menu "Optionen/Verzeichnisse Bedingungen", Definitionen) ist was anderes als wenn man es in die Projektdatei schreibt. In einer Datei definierte Defines wirken nur in dieser Datei.

Alternativ zu den Projektoptionen könntest du dir eine .inc-Datei anlegen und diese dann in allen deinen Units verwenden ({$INCLUCDE ...}


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.
Seite 1 von 2  1 2      

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