Accéder à une classe dérivée d'une dll par polymophisme
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
Code:
1 2 3 4
| class B
{
public: virtual void foo() = 0;
}; |
A.h
Code:
1 2 3 4 5 6
| #include "B.h"
class __declspec(dllexport) A : public B
{
public: void foo();
}; |
A.cpp
Code:
1 2 3
| #include "A.h"
void A::foo(){} |
DLLEntry.cpp
Code:
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;
} |
Dans l'exe:
Code:
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'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.
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.