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