HPP-Ausgabe (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.
  • {$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).

Siehe auch