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 Abfrage ob gerade für Delphi-Package kompiliert wird (https://www.delphipraxis.net/192230-abfrage-ob-gerade-fuer-delphi-package-kompiliert-wird.html)

Bernhard Geyer 31. Mär 2017 12:20

Delphi-Version: XE6

Abfrage ob gerade für Delphi-Package kompiliert wird
 
Ich brauche ein Compilierungsfallunterscheidung ob etwas als Delphi-package compiliert wird oder "normal" als DLL/Exe.
Im Package-Fall soll ein Codeabschnitt nicht übersetzt werden.

Jedoch finde ich keine $IFOPT/$IFDEF-Wert für diesen Fall.
Kann mir jemand hier auf die Sprünge helfen?

Mavarik 31. Mär 2017 12:31

AW: Abfrage ob gerade für Delphi-Package kompiliert wird
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1366060)
Ich brauche ein Compilierungsfallunterscheidung ob etwas als Delphi-package compiliert wird oder "normal" als DLL/Exe.
Im Package-Fall soll ein Codeabschnitt nicht übersetzt werden.

Jedoch finde ich keine $IFOPT/$IFDEF-Wert für diesen Fall.
Kann mir jemand hier auf die Sprünge helfen?

hmm Und wenn Du einfach im Dproj des Package ein Define setzt?

Bernhard Geyer 31. Mär 2017 12:40

AW: Abfrage ob gerade für Delphi-Package kompiliert wird
 
Zitat:

Zitat von Mavarik (Beitrag 1366063)
hmm Und wenn Du einfach im Dproj des Package ein Define setzt?

Hab ich jetzt gemacht.
Wäre aber schön wenn ich ohne auskommen würde.

himitsu 31. Mär 2017 13:05

AW: Abfrage ob gerade für Delphi-Package kompiliert wird
 
Für den Compiler ist es beim Code egal, denn der unterscheidet sich bei EXE, DLL und BPL garnicht, abgesehn von der Eintrittsprozedur.

BPL ist eine DLL mit Zuzatsfunktionen
Und es ist problemlos möglich eine EXE auch als DLL in einer anderen EXE zu nutzen.

Genauso wollte ich gern beim Compilieren wissen, ob die EXE/DLL/BPL mit der VCL, FMX oder Keinem kompiliert wird,
um in meiner "Komponente" entsprechend gegen die "richtigen" Application-Klasse zu kompilieren, aber nee. (ein vorhandener Namespace ist leider auch nicht zuverlässig, vorallem wenn der Entwickler ohne Namespaces arbeitet)

BerndS 31. Mär 2017 13:22

AW: Abfrage ob gerade für Delphi-Package kompiliert wird
 
Funktioniert das wirklich ?
Zitat:

Und es ist problemlos möglich eine EXE auch als DLL in einer anderen EXE zu nutzen.
Ich habe das mal mit einer EXE unter XE7 getestet, aber durch die unterschiedliche Initialisierung eine EXE und DLL funktionierte das nicht. Gibt es da einen Trick?

Gruß Bernd

Neutral General 31. Mär 2017 13:40

AW: Abfrage ob gerade für Delphi-Package kompiliert wird
 
Zitat:

Zitat von BerndS (Beitrag 1366070)
Funktioniert das wirklich ?
Zitat:

Und es ist problemlos möglich eine EXE auch als DLL in einer anderen EXE zu nutzen.
Ich habe das mal mit einer EXE unter XE7 getestet, aber durch die unterschiedliche Initialisierung eine EXE und DLL funktionierte das nicht. Gibt es da einen Trick?

Gruß Bernd

Was wolltest du denn genau machen?
Das reine Exportieren von Funktionen sollte ohne Probleme funktionieren.
Du hast halt bei einer Exe kein DllMain (zumindest hast du keinen Einfluss drauf), aber sonst ist eine DLL nur eine EXE mit nem gesetzten "DLL-Flag" im PE-Header

Bernhard Geyer 31. Mär 2017 14:23

AW: Abfrage ob gerade für Delphi-Package kompiliert wird
 
Zitat:

Zitat von Neutral General (Beitrag 1366071)
Zitat:

Zitat von BerndS (Beitrag 1366070)
Funktioniert das wirklich ?
Zitat:

Und es ist problemlos möglich eine EXE auch als DLL in einer anderen EXE zu nutzen.
Ich habe das mal mit einer EXE unter XE7 getestet, aber durch die unterschiedliche Initialisierung eine EXE und DLL funktionierte das nicht. Gibt es da einen Trick?

Gruß Bernd

Was wolltest du denn genau machen?
Das reine Exportieren von Funktionen sollte ohne Probleme funktionieren.
Du hast halt bei einer Exe kein DllMain (zumindest hast du keinen Einfluss drauf), aber sonst ist eine DLL nur eine EXE mit nem gesetzten "DLL-Flag" im PE-Header

Wir überlagern die Delphi PNG-Klasse mit einer erweiterten PNG-Klasse welche auch weitere Methoden/Properties hat.
in der Anwendung wird die Delphi-PNG-Klasse mit TPicture.UnRegisterGraphicClass(TPNGImage) deregistriert sowie ein überlagern mittels TPNGObject = TUnserSuperPngObject gemacht.
Bei der Compilierung der Packages wirkt das aber nicht so das die Methoden welche auf Features der erweiterten PNG-Klasse zugreifen krachen.

jbg 31. Mär 2017 15:16

AW: Abfrage ob gerade für Delphi-Package kompiliert wird
 
Man kann zur Laufzeit unterscheiden zumindest zwischen DLL und EXE unterscheiden: IsLibrary.

Man könnte aber auch über FindHInstance/FindClassHInstance mit der eigenen HInstance Variable vergleichen, um herauszufinden, ob die PNG-Klasse in der selben DLL/EXE liegt.

Uwe Raabe 31. Mär 2017 17:07

AW: Abfrage ob gerade für Delphi-Package kompiliert wird
 
Zitat:

Zitat von jbg (Beitrag 1366077)
Man kann zur Laufzeit unterscheiden zumindest zwischen DLL und EXE unterscheiden: IsLibrary.

Na ja, man kann auch direkt abfragen, ob es ein Package ist: ModuleIsPackage

jbg 31. Mär 2017 17:51

AW: Abfrage ob gerade für Delphi-Package kompiliert wird
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1366090)
ModuleIsPackage

Ich hatte, bevor ich geantwortet habe, noch nach "IsPackage" gesucht, da ich sowas im Kopf hatte :-) (Einheitliche Benennung war noch nie "Delphi"'s Stärke)


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