Freigeben über


CRuntimeClass-Struktur

Jede abgeleitete Klasse ist einer CRuntimeClass Struktur zugeordnet, mit CObject der Sie Informationen zu einem Objekt oder seiner Basisklasse zur Laufzeit abrufen können.

Syntax

struct CRuntimeClass

Member

Öffentliche Methoden

Name Beschreibung
CRuntimeClass::CreateObject Erstellt ein Objekt während der Laufzeit.
CRuntimeClass::FromName Erstellt ein Objekt während der Laufzeit unter Verwendung des bekannten Klassennamens.
CRuntimeClass::IsDerivedFrom Bestimmt, ob die Klasse von der angegebenen Klasse abgeleitet wird.

Öffentliche Datenmember

Name Beschreibung
CRuntimeClass::m_lpszClassName Der Name der Klasse.
CRuntimeClass::m_nObjectSize Die Größe des Objekts in Bytes.
CRuntimeClass::m_pBaseClass Ein Zeiger auf die CRuntimeClass Struktur der Basisklasse.
CRuntimeClass::m_pfnCreateObject Ein Zeiger auf die Funktion, die das Objekt dynamisch erstellt.
CRuntimeClass::m_pfnGetBaseClass Gibt die CRuntimeClass Struktur zurück (nur verfügbar, wenn dynamisch verknüpft).
CRuntimeClass::m_wSchema Die Schemanummer der Klasse.

Hinweise

CRuntimeClass ist eine Struktur und verfügt daher nicht über eine Basisklasse.

Die Möglichkeit, die Klasse eines Objekts zur Laufzeit zu ermitteln, ist nützlich, wenn eine zusätzliche Typüberprüfung von Funktionsargumenten erforderlich ist oder wenn Sie speziellen Code basierend auf der Klasse eines Objekts schreiben müssen. Laufzeitklasseninformationen werden nicht direkt von der C++-Sprache unterstützt.

CRuntimeClass stellt Informationen zum zugehörigen C++-Objekt bereit, z. B. einen Zeiger auf die CRuntimeClass Basisklasse und den ASCII-Klassennamen der zugehörigen Klasse. Diese Struktur implementiert auch verschiedene Funktionen, die zum dynamischen Erstellen von Objekten verwendet werden können, die Angabe des Objekttyps mithilfe eines vertrauten Namens und bestimmen, ob die zugehörige Klasse von einer bestimmten Klasse abgeleitet wird.

Weitere Informationen zur Verwendung CRuntimeClassfinden Sie im Artikel "Zugreifen auf Laufzeitklasseninformationen".

Vererbungshierarchie

CRuntimeClass

Anforderungen

Header: afx.h

CRuntimeClass::CreateObject

Rufen Sie diese Funktion auf, um die angegebene Klasse während der Laufzeit dynamisch zu erstellen.

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

Parameter

lpszClassName
Der vertraute Name der zu erstellenden Klasse.

Rückgabewert

Ein Zeiger auf das neu erstellte Objekt oder NULL, wenn der Klassenname nicht gefunden wird oder nicht genügend Arbeitsspeicher zum Erstellen des Objekts vorhanden ist.

Hinweise

Von abgeleiteten CObject Klassen können die dynamische Erstellung unterstützen. Dies ist die Möglichkeit, ein Objekt einer angegebenen Klasse zur Laufzeit zu erstellen. Dokument-, Ansichts- und Frameklassen sollten z. B. die dynamische Erstellung unterstützen. Weitere Informationen zur dynamischen Erstellung und zum CreateObject Element finden Sie unter CObject Class and CObject Class: Specifying Levels of Functionality.

Beispiel

Sehen Sie sich das Beispiel für IsDerivedFrom an.

CRuntimeClass::FromName

Rufen Sie diese Funktion auf, um die Struktur abzurufen, die CRuntimeClass dem vertrauten Namen zugeordnet ist.

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

Parameter

lpszClassName
Der bekannte Name einer Klasse, die von CObject.

Rückgabewert

Ein Zeiger auf ein CRuntimeClass Objekt, das dem Namen entspricht, der in lpszClassName übergeben wird. Die Funktion gibt NULL zurück, wenn kein übereinstimmender Klassenname gefunden wurde.

Beispiel

// This example creates an object if CAge is defined.

CRuntimeClass* pClass = CRuntimeClass::FromName(_T("CAge"));
if (pClass == NULL)
{
   // not found, display a warning for diagnostic purposes
   AfxMessageBox(_T("Warning: CMyClass not defined"));
   return NULL;
}

// attempt to create the object with the found CRuntimeClass
CObject* pObject = pClass->CreateObject();

CRuntimeClass::IsDerivedFrom

Rufen Sie diese Funktion auf, um zu ermitteln, ob die aufrufende Klasse von der im Parameter "pBaseClass " angegebenen Klasse abgeleitet wird.

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

Parameter

pBaseClass
Der bekannte Name einer Klasse, die von CObject.

Rückgabewert

TRUE, wenn der Aufruf IsDerivedFrom der Klasse von der Basisklasse abgeleitet wird, deren CRuntimeClass Struktur als Parameter angegeben wird; andernfalls FALSE.

Hinweise

Die Beziehung wird durch "Walking" von der Klasse des Mitglieds bis hin zur Kette abgeleiteter Klassen bestimmt. Diese Funktion gibt nur FALSE zurück, wenn keine Übereinstimmung für die Basisklasse gefunden wird.

Hinweis

Um die CRuntimeClass Struktur zu verwenden, müssen Sie das IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE oder IMPLEMENT_SERIAL Makro in die Implementierung der Klasse einschließen, für die Sie Laufzeitobjektinformationen abrufen möchten.

Weitere Informationen zur Verwendung CRuntimeClassfinden Sie im Artikel CObject-Klasse: Zugreifen auf Laufzeitklasseninformationen.

Beispiel

// This example creates an object from the run-time class. It only 
// creates objects derived from CWnd.

// We only want to create an object derived from CWnd.
if (!pClass->IsDerivedFrom(RUNTIME_CLASS(CWnd)))
{
   TRACE(_T("Error; Object %s is not derived from CWnd\n"),
      pClass->m_lpszClassName);
   return FALSE;
}

// Get a pointer to the base class CRuntimeClass.
#ifdef _AFXDLL
CRuntimeClass* pBaseClass = pClass->m_pfnGetBaseClass();
#else
CRuntimeClass* pBaseClass = pClass->m_pBaseClass;
#endif
ASSERT(pBaseClass != NULL);

TRACE("Creating object %s derived from %s, with object size %d "
   "and schema %d\n", pClass->m_lpszClassName,
   pBaseClass->m_lpszClassName, pClass->m_nObjectSize,
   pClass->m_wSchema);

// Create the object.
CObject* pObject = pClass->CreateObject();

CRuntimeClass::m_lpszClassName

Eine mit Null beendete Zeichenfolge, die den ASCII-Klassennamen enthält.

Hinweise

Dieser Name kann verwendet werden, um eine Instanz der Klasse mithilfe der FromName Memberfunktion zu erstellen.

Beispiel

Sehen Sie sich das Beispiel für IsDerivedFrom an.

CRuntimeClass::m_nObjectSize

Die Größe des Objekts in Byte.

Hinweise

Wenn das Objekt Datenmmber enthält, die auf den zugeordneten Speicher verweisen, ist die Größe dieses Speichers nicht enthalten.

Beispiel

Sehen Sie sich das Beispiel für IsDerivedFrom an.

CRuntimeClass::m_pBaseClass

Wenn Die Anwendung statisch mit MFC verknüpft ist, enthält dieses Datenmemm einen Zeiger auf die CRuntimeClass Struktur der Basisklasse.

Hinweise

Wenn Ihre Anwendung dynamisch mit der MFC-Bibliothek verknüpft ist, lesen Sie m_pfnGetBaseClass.

Beispiel

Sehen Sie sich das Beispiel für IsDerivedFrom an.

CRuntimeClass::m_pfnCreateObject

Ein Funktionszeiger auf den Standardkonstruktor, der ein Objekt Ihrer Klasse erstellt.

Hinweise

Dieser Zeiger ist nur gültig, wenn die Klasse die dynamische Erstellung unterstützt. andernfalls gibt die Funktion NULL zurück.

CRuntimeClass::m_pfnGetBaseClass

Wenn Ihre Anwendung die MFC-Bibliothek als freigegebene DLL verwendet, verweist dieses Datenelement auf eine Funktion, die die CRuntimeClass Struktur der Basisklasse zurückgibt.

Hinweise

Wenn Ihre Anwendung statisch mit der MFC-Bibliothek verknüpft ist, lesen Sie m_pBaseClass.

Beispiel

Sehen Sie sich das Beispiel für IsDerivedFrom an.

CRuntimeClass::m_wSchema

Die Schemanummer ( -1 für nicht ialisierbare Klassen).

Hinweise

Weitere Informationen zu Schemanummern finden Sie im IMPLEMENT_SERIAL Makro.

Beispiel

Sehen Sie sich das Beispiel für IsDerivedFrom an.

Siehe auch

Hierarchiediagramm
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL