Bonjour,
Depuis une application, je cherche à accéder à une classe A dérivant d'une classe B abstraite sachant que la classe A se trouve dans une dll et que l'application connaît la classe B uniquement.
J'aimerais que cet accès à la classe A se fasse donc via le mécanisme de polymorphisme c'est-à dire comme un objet de classe B.
Voilà grosso-modo le code
B.h
A.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class B { public: virtual void foo() = 0; };
A.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include "B.h" class __declspec(dllexport) A : public B { public: void foo(); };
DLLEntry.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #include "A.h" void A::foo(){}
Dans l'exe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include "A.h" BOOL APIENTRY DllMain(HINSTANCE, unsigned long reason_for_call, void*) { return TRUE; } extern "C" __declspec(dllexport) B * CreateB() { return new A; }
J'arrive à compiler dll et application. Le chargement de la dll se fait correctement ainsi que l'appel de la fonction CreateB. Cependant dés que j'essaie d'accéder à une fonction de l'objet créé, j'ai un crash. On dirait que j'accède à la fonction foo de la classe abstraite B et non de la classe A.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include "B.h" // chargement dynamique de A.dll et récupération d'un pointeur sur CreateB B * unA = CreateB(); // pas de soucis unA->foo(); // crash
J'ai trouvé pleins de choses sur le net mais sans succès.
Je me mélange aussi les pédales dans toutes ces histoires de declspec que je ne maîtrise pas.
Flo.
Partager