Partager via


CRuntimeClass, structure

Chaque classe dérivée CObject est associée à une CRuntimeClass structure que vous pouvez utiliser pour obtenir des informations sur un objet ou sa classe de base au moment de l’exécution.

Syntaxe

struct CRuntimeClass

Membres

Méthodes publiques

Nom Description
CRuntimeClass ::CreateObject Crée un objet pendant l’exécution.
CRuntimeClass ::FromName Crée un objet pendant l’exécution à l’aide du nom de classe familier.
CRuntimeClass ::IsDerivedFrom Détermine si la classe est dérivée de la classe spécifiée.

Membres de données publics

Nom Description
CRuntimeClass ::m_lpszClassName Nom de la classe.
CRuntimeClass ::m_nObjectSize Taille de l'objet en octets.
CRuntimeClass ::m_pBaseClass Pointeur vers la CRuntimeClass structure de la classe de base.
CRuntimeClass ::m_pfnCreateObject Pointeur vers la fonction qui crée dynamiquement l’objet.
CRuntimeClass ::m_pfnGetBaseClass Retourne la CRuntimeClass structure (disponible uniquement lorsqu’elle est liée dynamiquement).
CRuntimeClass ::m_wSchema Numéro de schéma de la classe.

Notes

CRuntimeClass est une structure et n’a donc pas de classe de base.

La possibilité de déterminer la classe d’un objet au moment de l’exécution est utile lorsque la vérification de type supplémentaire des arguments de fonction est nécessaire, ou lorsque vous devez écrire du code à usage spécial en fonction de la classe d’un objet. Les informations sur la classe d'exécution ne sont pas prises en charge directement par le langage C++.

CRuntimeClass fournit des informations sur l’objet C++ associé, par exemple un pointeur vers la CRuntimeClass classe de base et le nom de classe ASCII de la classe associée. Cette structure implémente également différentes fonctions qui peuvent être utilisées pour créer dynamiquement des objets, en spécifiant le type d’objet à l’aide d’un nom familier et en déterminant si la classe associée est dérivée d’une classe spécifique.

Pour plus d’informations sur l’utilisation CRuntimeClass, consultez l’article Accès aux informations de classe d’exécution.

Hiérarchie d'héritage

CRuntimeClass

Spécifications

En-tête : afx.h

CRuntimeClass ::CreateObject

Appelez cette fonction pour créer dynamiquement la classe spécifiée pendant l’exécution.

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

Paramètres

lpszClassName
Nom familier de la classe à créer.

Valeur de retour

Pointeur vers l’objet nouvellement créé, ou NULL si le nom de la classe est introuvable ou si la mémoire est insuffisante pour créer l’objet.

Notes

Les classes dérivées CObject peuvent prendre en charge la création dynamique, qui est la possibilité de créer un objet d’une classe spécifiée au moment de l’exécution. Les classes de document, d’affichage et de frame, par exemple, doivent prendre en charge la création dynamique. Pour plus d’informations sur la création dynamique et le CreateObject membre, consultez la classe CObject et la classe CObject : spécification des niveaux de fonctionnalité.

Exemple

Consultez l’exemple de IsDerivedFrom.

CRuntimeClass ::FromName

Appelez cette fonction pour récupérer la CRuntimeClass structure associée au nom familier.

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

Paramètres

lpszClassName
Nom familier d’une classe dérivée de CObject.

Valeur de retour

Pointeur vers un CRuntimeClass objet, correspondant au nom transmis dans lpszClassName. La fonction retourne NULL si aucun nom de classe correspondant n’a été trouvé.

Exemple

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

Appelez cette fonction pour déterminer si la classe appelante est dérivée de la classe spécifiée dans le paramètre pBaseClass .

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

Paramètres

pBaseClass
Nom familier d’une classe dérivée de CObject.

Valeur de retour

TRUE si l’appel IsDerivedFrom de classe est dérivé de la classe de base dont CRuntimeClass la structure est donnée en tant que paramètre ; sinon FALSE.

Notes

La relation est déterminée par la « marche » de la classe du membre vers le haut de la chaîne de classes dérivées jusqu’au haut. Cette fonction retourne uniquement FALSE si aucune correspondance n’est trouvée pour la classe de base.

Remarque

Pour utiliser la CRuntimeClass structure, vous devez inclure la macro IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE ou IMPLEMENT_SERIAL dans l’implémentation de la classe pour laquelle vous souhaitez récupérer les informations d’objet runtime.

Pour plus d’informations sur l’utilisation CRuntimeClass, consultez l’article CObject, classe : accès aux informations de classe d’exécution.

Exemple

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

Chaîne terminée par null contenant le nom de la classe ASCII.

Notes

Ce nom peut être utilisé pour créer une instance de la classe à l’aide de la FromName fonction membre.

Exemple

Consultez l’exemple de IsDerivedFrom.

CRuntimeClass ::m_nObjectSize

Taille de l’objet, en octets.

Notes

Si l’objet a des membres de données qui pointent vers la mémoire allouée, la taille de cette mémoire n’est pas incluse.

Exemple

Consultez l’exemple de IsDerivedFrom.

CRuntimeClass ::m_pBaseClass

Si votre application est liée statiquement à MFC, ce membre de données contient un pointeur vers la CRuntimeClass structure de la classe de base.

Notes

Si votre application est liée dynamiquement à la bibliothèque MFC, consultez m_pfnGetBaseClass.

Exemple

Consultez l’exemple de IsDerivedFrom.

CRuntimeClass ::m_pfnCreateObject

Pointeur de fonction vers le constructeur par défaut qui crée un objet de votre classe.

Notes

Ce pointeur est valide uniquement si la classe prend en charge la création dynamique ; sinon, la fonction retourne NULL.

CRuntimeClass ::m_pfnGetBaseClass

Si votre application utilise la bibliothèque MFC comme DLL partagée, ce membre de données pointe vers une fonction qui retourne la CRuntimeClass structure de la classe de base.

Notes

Si votre application est liée statiquement à la bibliothèque MFC, consultez m_pBaseClass.

Exemple

Consultez l’exemple de IsDerivedFrom.

CRuntimeClass ::m_wSchema

Numéro de schéma ( -1 pour les classes non modifiables).

Notes

Pour plus d’informations sur les numéros de schéma, consultez la macro IMPLEMENT_SERIAL .

Exemple

Consultez l’exemple de IsDerivedFrom.

Voir aussi

Graphique hiérarchique
CObject ::GetRuntimeClass
CObject ::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL