Bonjour à vous tous,
Je viens vous voir car j'ai essayé de faire un truc qui est assez compliqué mais j'arrive au bout de mes moyens. Bon je m'explique.
Je veux pour créer une classe quelquonque dont le nom est inconnu au moment de la compilation, et dont le nom est contenu dans une chaine de caractères.
Pour etre plus précis, j'ai une classe CDpPompe qui est général ( dans son fonctionnement ) contenu dans une DLL DPPOMPE.DLL, et une autre class CDpPompeDepot qui est particulière au dépot contenu dans une autre DLL DEPOT.DLL. Mon souhait est de créer un objet CDpPompeDepot si cet objet existe et dans le cas contraire créer un objet de la classe CDpPompe.
J'ai cherché dans l'aide et j'ai trouvé la méthode "CreateObject" contenu dans la classe"CRuntimeClass". Voici un exemple pour commencer, me permettant de vérifier que la classe 'CDpPompe' était correctement configurer grâce à "DECLARE_DYNCREATE ( CDpPompe )" et "IMPLEMENT_DYNCREATE (CDpPompe, CObject)".
Ca, ca marche correctement. Mais ce ne rentre pas dans mes souhait. Le nom de la classe est rentré en dur dans le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CRuntimeClass* pRuntimeClass = RUNTIME_CLASS( CDpPompe ); CObject* pObject = pRuntimeClass->CreateObject();
Cependant il existe un autre contructeur de "CreateObject" qui est :
Donc mon test est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 static CObject* PASCAL CreateObject( LPCSTR lpszClassName );
Et le resultat est accablant, pObject = 0x00000000 à quelques 0 près.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CRuntimeClass* pRuntimeClass = this->GetRuntimeClass ( ); CObject* pObject = pClass->CreateObject("CDpPompe");
J'ai peut être une idée. Le 'this' correspond à une la classe actuelle qui est un objet de la classe CWinApp. Peut être faudrait-il utilisé quelques chose à la place du 'this'.
Donc j'ai tout vérifier, CDpPompe hérite bien de CObject. Les macros DECLARE_DYNCREATE, et IMPLEMENT_DYNCREATE sont correctement écrit.
Vanitom
Partager