__declspec(delphiclass)

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Schlüsselwörter alphabetisch - Index


Kategorie

Modifizierer, Schlüsselwort-Erweiterungen, Speicherklassenspezifizierer

Syntax

__declspec( delphiclass ) declarator

Beschreibung

Mit dem Argument delphiclass werden Klassen im Object Pascal-Stil deklariert. Solche Klassen werden mit der folgenden Kompatibilität erstellt:

  • Object Pascal-kompatible RTTI
  • Object Pascal-kompatible Exception-Behandlung
  • Object Pascal-kompatibles Konstruktor-/Destruktor-Verhalten
  • AfterConstruction- und BeforeDestruction-Prozeduren (Code, der in regulären C++-Klassen in Konstruktoren bzw. Destruktoren gesetzt würde)

Für Klassen im Object Pascal-Stil gelten die folgenden Einschränkungen:

  • Virtuelle Basisklassen sind nicht zulässig.
  • Mehrfachvererbung ist nicht zulässig, außer für den unter Vererbung und Interfaces beschriebenen Fall.
  • Sie müssen dynamisch mit dem globalen Operator new erzeugt werden.
  • Instanzen im Object Pascal-Stil werden mit Null initialisiert, damit ihr Status vor Ausführung eines Konstruktors oder einer Methode definiert ist. Ohne dieses Vorgehen würde der Aufruf von Methoden vor Konstruktoren zu unvorhersehbaren Ergebnissen führen.
  • Kopierkonstruktoren und Zuweisungsoperatoren werden für abgeleitete Klassen im Object Pascal-Stil nicht vom Compiler erzeugt.
  • Eine aus Object Pascal übersetzte Forward-Klassendeklaration erfordert den Modifizierer delphiclass, wenn dem Compiler mitgeteilt werden muss, dass die Klasse im Object Pascal-Stil vorliegt. (Zum Beispiel, wenn die Klassen-ID oder andere RTTI-Informationen vor der Klassendefinition erforderlich sind.)

Weitere Anmerkungen:

  • Im Gegensatz zu regulären C++-Klassen können die Konstruktoren und Destruktoren von Basisklassen im Object Pascal-Stil virtuelle Methoden aufrufen und die "am weitesten abgeleiteten" Implementierungen ausführen. Auf diese Weise ist es möglich, dass eine Methode einer Klasse vor einem Konstruktor ausgeführt wird.

Beispiel

In dem folgenden Beispiel wird eine Klasse im Object Pascal-Stil mit einer Klassenmethode deklariert, die den Klassennamen zurückgibt.

 #include <System.hpp>
 #include <stdio.h>
 #include <tchar.h>
 
 class __declspec(delphiclass) TLock {
 public:
 	__classmethod UnicodeString GetClsName() {
 		return this->ClassName();
 	}
 };
 
 int _tmain(int argc, _TCHAR* argv[]) {
 	printf("%ls", TLock::GetClsName().c_str()); // displays TLock
 	return 0;
 }

Siehe auch