""
""
Essaie comme ceci:
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 //Factory.cpp #include <string> #include "Factory.h" #include "MyQt.h" extern "C" DYNAMIQUE_API LibraryInterface* createInstance() { return (new MyQt()); } extern "C" DYNAMIQUE_API void deleteInstance(LibraryInterface *instance) { delete instance; }
Code C++ : 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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 #include <windows.h> #include <iostream> #include "LibraryInterface.h" using namespace std; typedef LibraryInterface* (*POINTEUR_FONCTION) (void); int main(int &argc, char **argv) { HINSTANCE DllInstance; POINTEUR_FONCTION createInstance = NULL; if ((DllInstance=LoadLibrary(TEXT("DllLibrary.dll")))!=NULL) { cout << "Load" << endl; createInstance = (POINTEUR_FONCTION)::GetProcAddress(DllInstance, "createInstance"); if (createInstance != NULL) { cout << "Fonction Load" << endl; LibraryInterface *pMyQt; cout << pMyQt << endl; pMyQt= createInstance(); cout << pMyQt << endl; pMyQt->createWindow(); } else { cout << "Fonction unload" << endl; } //On libère la dll FreeLibrary(DllInstance); }else{ cout << "Unload" << endl; } char pause; cin >> pause; return 0; }
Si "createInstance" n'est toujours pas trouvé, essaie en le précédant d'un underscore dans l'appel à LoadLibrary().
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Il est normal le char* dans
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part typedef LibraryInterface* (*POINTEUR_FONCTION) (char*);
Le manque de portabilité entre compilateur C++ rend l'utilisation d'API C++ complètement illusoire.
Moi, j'utiliserais une API C avec un void* (un handler) comme premier paramètre qui sera un pointeur sur l'objet.
Résultats :
un complète compatibilité avec tout les compilateurs C/C++,
cloisonnement strict entre les C-Runtime das Dll,
utilisation par des languages non-objet
utilisation de la POO via le handle ( à la Win32)
Rien n'empêche de créer des DLLs cantonnées à un seul projet, tu sais...
De plus, ensuite il y a des standards pour une meilleure portabilité au niveau objet, sous certains systèmes. Sous Windows, il y a COM (Component Object Model), qui marchera quel que soit le compilateur du moment qu'on respecte ses guidelines.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Une API COM est une API "Objet" language agnostique, et pas C++.
Déjà qu'ils ont du mal à gérer des types simples, imagine avec les types template pour la gestion de la durée de vie des références.
Une dll pour 1 projet, autant pas faire de dll. les dll sont faite pour être partagées et évolutives, sinon autant faire des librairies statiques.
On peut toujours les partager entre plusieurs exécutables d'un même projet. C'est le cas à mon boulot, d'ailleurs.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager