Share via


CRuntimeClass-structuur

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Elke klasse die is afgeleid van CObject , is gekoppeld aan een CRuntimeClass structuur die u kunt gebruiken om informatie te verkrijgen over een object of de basisklasse ervan tijdens runtime.

Syntaxis

struct CRuntimeClass

Leden

Openbare methoden

Naam Description
CRuntimeClass::CreateObject Hiermee maakt u een object tijdens runtime.
CRuntimeClass::FromName Hiermee maakt u een object tijdens runtime met behulp van de vertrouwde klassenaam.
CRuntimeClass::IsDerivedFrom Bepaalt of de klasse is afgeleid van de opgegeven klasse.

Leden van openbare gegevens

Naam Description
CRuntimeClass::m_lpszClassName De naam van de klas.
CRuntimeClass::m_nObjectSize De grootte van het object in bytes.
CRuntimeClass::m_pBaseClass Een aanwijzer naar de CRuntimeClass structuur van de basisklasse.
CRuntimeClass::m_pfnCreateObject Een aanwijzer naar de functie waarmee het object dynamisch wordt gemaakt.
CRuntimeClass::m_pfnGetBaseClass Retourneert de CRuntimeClass structuur (alleen beschikbaar wanneer deze dynamisch is gekoppeld).
CRuntimeClass::m_wSchema Het schemanummer van de klasse.

Opmerkingen

CRuntimeClass is een structuur en heeft daarom geen basisklasse.

De mogelijkheid om de klasse van een object tijdens runtime te bepalen, is handig wanneer extra type controle van functieargumenten nodig is of wanneer u speciale code moet schrijven op basis van de klasse van een object. Runtimeklassegegevens worden niet rechtstreeks ondersteund door de C++-taal.

CRuntimeClass bevat informatie over het gerelateerde C++-object, zoals een aanwijzer naar de CRuntimeClass basisklasse en de ASCII-klassenaam van de gerelateerde klasse. Deze structuur implementeert ook verschillende functies die kunnen worden gebruikt voor het dynamisch maken van objecten, het opgeven van het type object met behulp van een vertrouwde naam en het bepalen of de gerelateerde klasse is afgeleid van een specifieke klasse.

Zie het artikel Toegang tot Run-Time Klasse-informatie voor meer informatie over het gebruikCRuntimeClass.

Overnamehiërarchie

CRuntimeClass

Requirements

koptekst: afx.h

CRuntimeClass::CreateObject

Roep deze functie aan om de opgegeven klasse dynamisch te maken tijdens de runtime.

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

Parameterwaarden

lpszClassName
De vertrouwde naam van de klasse die moet worden gemaakt.

Retourwaarde

Een aanwijzer naar het zojuist gemaakte object of NULL als de klassenaam niet wordt gevonden of er onvoldoende geheugen is om het object te maken.

Opmerkingen

Klassen die zijn afgeleid van CObject kunnen dynamische creatie ondersteunen. Dit is de mogelijkheid om tijdens runtime een object van een opgegeven klasse te maken. Document-, weergave- en frameklassen moeten bijvoorbeeld ondersteuning bieden voor dynamisch maken. Zie CObject Class en CObject Class: Specifying Levels of Functionality voor meer informatie over dynamisch maken en het CreateObject lid.

Example

Zie het voorbeeld voor IsDerivedFrom.

CRuntimeClass::FromName

Roep deze functie aan om de CRuntimeClass structuur op te halen die is gekoppeld aan de vertrouwde naam.

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

Parameterwaarden

lpszClassName
De bekende naam van een klasse die is afgeleid van CObject.

Retourwaarde

Een aanwijzer naar een CRuntimeClass object, die overeenkomt met de naam die is doorgegeven in lpszClassName. De functie retourneert NULL als er geen overeenkomende klassenaam is gevonden.

Example

// 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

Roep deze functie aan om te bepalen of de aanroepende klasse is afgeleid van de klasse die is opgegeven in de parameter pBaseClass .

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

Parameterwaarden

pBaseClass
De bekende naam van een klasse die is afgeleid van CObject.

Retourwaarde

WAAR als de klasse-aanroep IsDerivedFrom is afgeleid van de basisklasse waarvan CRuntimeClass de structuur wordt opgegeven als een parameter; anders ONWAAR.

Opmerkingen

De relatie wordt bepaald door 'lopen' van de klasse van het lid tot de keten van afgeleide klassen helemaal tot aan de bovenkant. Deze functie retourneert alleen FALSE als er geen overeenkomst wordt gevonden voor de basisklasse.

Opmerking

Als u de CRuntimeClass structuur wilt gebruiken, moet u de IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE of IMPLEMENT_SERIAL macro opnemen in de implementatie van de klasse waarvoor u runtime-objectgegevens wilt ophalen.

Zie het artikel CObject Class: Accessing Run-Time Class Information voor meer informatie over het gebruikCRuntimeClass.

Example

// 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

Een door null beëindigde tekenreeks met de naam van de ASCII-klasse.

Opmerkingen

Deze naam kan worden gebruikt om een exemplaar van de klasse te maken met behulp van de FromName lidfunctie.

Example

Zie het voorbeeld voor IsDerivedFrom.

CRuntimeClass::m_nObjectSize

De grootte van het object, in bytes.

Opmerkingen

Als het object gegevensleden bevat die verwijzen naar toegewezen geheugen, wordt de grootte van dat geheugen niet opgenomen.

Example

Zie het voorbeeld voor IsDerivedFrom.

CRuntimeClass::m_pBaseClass

Als uw toepassing statisch is gekoppeld aan MFC, bevat dit gegevenslid een aanwijzer naar de CRuntimeClass structuur van de basisklasse.

Opmerkingen

Als uw toepassing dynamisch is gekoppeld aan de MFC-bibliotheek, raadpleegt u m_pfnGetBaseClass.

Example

Zie het voorbeeld voor IsDerivedFrom.

CRuntimeClass::m_pfnCreateObject

Een functieaanwijzer naar de standaardconstructor waarmee een object van uw klasse wordt gemaakt.

Opmerkingen

Deze aanwijzer is alleen geldig als de klasse dynamische creatie ondersteunt; anders retourneert de functie NULL.

CRuntimeClass::m_pfnGetBaseClass

Als uw toepassing de MFC-bibliotheek als gedeelde DLL gebruikt, verwijst dit gegevenslid naar een functie die de CRuntimeClass structuur van de basisklasse retourneert.

Opmerkingen

Als uw toepassing statisch is gekoppeld aan de MFC-bibliotheek, raadpleegt u m_pBaseClass.

Example

Zie het voorbeeld voor IsDerivedFrom.

CRuntimeClass::m_wSchema

Het schemanummer (-1 voor niet-beserialiseerde klassen).

Opmerkingen

Zie de IMPLEMENT_SERIAL macro voor meer informatie over schemanummers.

Example

Zie het voorbeeld voor IsDerivedFrom.

Zie ook

Hiërarchiegrafiek
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL