HPP-Ausgabe (Delphi)
Nach oben zu Liste der Delphi-Compiler-Direktiven - Index
Typ |
Parameter |
Syntax |
{$HPPEMIT 'String'} |
Die Direktive HPPEMIT fügt der für C++ generierten Header-Datei einen bestimmten String hinzu. Zum Beispiel: {$HPPEMIT 'typedef double Weight;' }
. Wenn eine Unit vorhanden ist, die gelinkt werden muss, auch wenn keine Referenzen darauf bestehen, sollte im Delphi-Code die Direktive HPPEMIT verwendet werden. Der aus dieser Unit generierte HPP-Header enthält dann Makros, die sicherstellen, dass der Header, wenn er in eine C++-Quelldatei einbezogen wird, veranlasst, dass die Unit gelinkt wird.
HPPEMIT-Direktiven werden im Benutzerabschnitt am Beginn der Header-Datei ausgegeben, und zwar in der Reihenfolge, in der sie in der Delphi-Datei stehen.
Die Direktive HPPEMIT akzeptiert eine optionale END-Direktive, die den Compiler anweist, den String am Ende der .hpp-Datei auszugeben. Ansonsten wird der String am Beginn der Datei ausgegeben.
Beispiel:
{$HPPEMIT 'Symbol goes to top of file'}
{$HPPEMIT END 'Symbol goes to bottom of file'}
Für C++ auf mobilen Plattformen ersetzt {$HPPEMIT LINKUNIT}
die Direktive #pragma link
Für C++-Anwendungen ersetzt {$HPPEMIT LINKUNIT}
die Direktive #pragma link
auf mobilen Plattformen.
Die Delphi-Laufzeit enthält Units, die gelinkt werden müssen, damit bestimmte Funktionen aktiviert werden. In C++ wurde das automatische Linken früher mit der folgenden Direktive erreicht:
{$HPPEMIT '#pragma link "<Unit-Name>"'}
Jetzt müssen Sie stattdessen die folgende Direktive verwenden:
{$HPPEMIT LINKUNIT}
Generieren von Namespace-Deklarationen für C++
In XE5 Update 2 wurden außerdem zwei neue HPPEMIT-Direktiven hinzugefügt:
{$HPPEMIT OPENNAMESPACE}
- Diese Direktive erzeugt C++-Namespace-Deklarationen für die aktuelle Unit.
- Beispielweise wird der folgende Inhalt in der zugehörigen HPP-Datei generiert, wenn Sie
{$HPPEMIT OPENNAMESPACE}
in der Unit FMX.Bind.Editors.pas verwenden:
namespace Fmx
{
namespace Bind
{
namespace Editors
{
{$HPPEMIT CLOSENAMESPACE}
- Diese Direktive erzeugt schließende geschweifte Klammern für die mit
{$HPPEMIT OPENNAMESPACE}
generierten Namespaces.
- Diese Direktive erzeugt schließende geschweifte Klammern für die mit
{$HPPEMIT NOUSINGNAMESPACE}
- Damit wird dem Delphi-Compiler mitgeteilt, "using namespace <Unit-Name>;" nicht zu generieren. Diese Zeile steht typischerweise am Ende von HPP-Dateien, die aus einer PAS-Unit generiert wurden. Diese Direktive verhindert, dass der globale Namespace belastet wird, und kann beim Vermeiden von Mehrdeutigkeiten sehr hilfreich sein. Denselben Effekt können Sie durch Definition des Makros DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE erzielen. Dieses Makro kann allerdings Fehler verursachen, wenn im Code keine qualifizierten Namen verwendet werden (z. B. in von der IDE erzeugten Ereignisbehandlungsroutinen).