![]() |
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? |
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Zitat:
|
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Zitat:
Wäre aber schön wenn ich ohne auskommen würde. |
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) |
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Funktioniert das wirklich ?
Zitat:
Gruß Bernd |
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Zitat:
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 |
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Zitat:
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. |
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. |
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Zitat:
![]() |
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Zitat:
|
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
In ModuleIsPackage steckt aber auch IsPackage drin.
'nen intelligenter Filter der Codevervollständigung war auch noch nie deren Stärke. |
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Zitat:
Delphi-Quellcode:
var
ModuleIsLib: Boolean; { True if this module is a dll (a library or a package) } ModuleIsPackage: Boolean; { True if this module is a package } ModuleIsCpp: Boolean; { True if this module is compiled using C++ Builder } |
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Ähhhhhhh, wozu ModuleIsCpp?
Wenn ich 'nen Code in C++ schreibe, dann ist das True und wenn ich den in Pascal/Delphi schreibe dann False? Aber wenn ich in C++ schreibe, dann weiß ich das doch auch so? [edit] Ich glaub es ist spät. Beim CppBuilder kann man doch Delphi-Code einbinden, oder Delphi-Units oder irgendwie sowas. :stupid: Warum eigentlich nicht andersrum? (OK, abgesehn von .OBJ) |
Exe als DLL verwenden.
@Neutral General
Ich habe hier ein einfaches Projekt um das zu testen.
Delphi-Quellcode:
Der Test erfolgt mit:
program ExeAsDLL;
uses WinApi.Windows, Vcl.Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} procedure ShowDocument; stdcall; begin WinApi.Windows.MessageBox(0, 'ShowDocument', 'ExeAsDLL', MB_ICONINFORMATION or MB_OK); end; exports ShowDocument; begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end. rundll32 ExeAsDLL.exe ShowDocument Unter Windows 7 kommt die bekannte Meldung Programm funktioniert nicht mehr unter W10 wird nichts angezeigt. Gruß Bernd |
AW: Exe als DLL verwenden.
Man muß hier in der DLLMain, bzw. in der EXE-Main eventuell noch einen abbruch-Code rein machen ... z.B. vor das
Delphi-Quellcode:
etwas ala
Application.Initialize
Delphi-Quellcode:
if IsLibrary then Exit;
|
AW: Abfrage ob gerade für Delphi-Package kompiliert wird
Zitat:
Genau das habe ich für eine BPL gesucht, um ein Design-PKG zu vermeiden :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 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