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)".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    CRuntimeClass* pRuntimeClass = RUNTIME_CLASS( CDpPompe );
    CObject* pObject = pRuntimeClass->CreateObject();
Ca, ca marche correctement. Mais ce ne rentre pas dans mes souhait. Le nom de la classe est rentré en dur dans le code.

Cependant il existe un autre contructeur de "CreateObject" qui est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
		static CObject* PASCAL CreateObject(
   				LPCSTR lpszClassName 
		);
Donc mon test est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    CRuntimeClass* pRuntimeClass = this->GetRuntimeClass ( );
		CObject* pObject = pClass->CreateObject("CDpPompe");
Et le resultat est accablant, pObject = 0x00000000 à quelques 0 près.

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