Bonjour,
Cela fait quelques jours que je cherche le moyen d'exporter une classe c++ contenant seulement de la donnée (chaines de caractères, entiers...) dans une dll.
Quelques contraintes, parce que sinon, ça serait trop facile :
- La dll doit être utilisable par du delphi, du vb, ... donc me dites pas d'importer le .h dans l'appli qui utilise la dll, c'est pas possible.
- L'objet que je veux exporter contient d'autres objets (que je vais devoir exporter aussi)
Ou j'en suis aujourd'hui :
- J'ai vu qu'on pouvait faire du __declspec(dllexport) mais je dois avoir le .h pour utiliser ma classe -> je veux juste une dll
- J'ai essayé avec un .def (créé à partir d'infos trouvées dans le .map) mais j'ai l'impression que les classes n'y sont pas. J'ai le constructeur, le destructeur mais pas la classe en elle même. Ou alors je n'ai pas compris comment l'importer après.
- Voilà le code simplifié :
[DLL]
Ma classe de donnée
une fonction (que j'exporte également) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #undef AFX_DATA #define AFX_DATA AFX_EXT_DATA #include <string> class Plop { public: Plop(void); ~Plop(void); public: std::string* plopy; }; #undef AFX_DATA #define AFX_DATA
Mon fichier .def :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Plop* GiveMePlop() { return new Plop(); }
[APPLI]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 LIBRARY "PlopAPI" EXPORTS GiveMePlop @1 Plop = ??0Plop@@QAE@XZ @2
ma classe qui utilise la dll :
J'ai l'impression qu'il manque pas grand chose pour que ca marche ou bien que c'est impossible mais dans les deux cas, je veux bien savoir comment faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 typedef int (*GiveMePlopFunc)(); /* je voudrais pas du int mais du Plop* */ HINSTANCE hInstLibrary = LoadLibrary(_T("Plop.dll")); if (hInstLibrary) { GiveMePlopFunc plopFunc = (GiveMePlopFunc)GetProcAddress(hInstLibrary,"GiveMePlop"); /* ici je voudrais récupérer mon objet plop : Plop* plop = */ plopFunc(); }
Merci d'avance
Partager