Comment je peux exporter des fonctions membres d'après une classe développ' dans une DLL ????? Ce dll contient le composant que j'ai developpé et je veux exporter quelque méthdes pour les utiliser dans un code exécutable. :yaisse2:
Version imprimable
Comment je peux exporter des fonctions membres d'après une classe développ' dans une DLL ????? Ce dll contient le composant que j'ai developpé et je veux exporter quelque méthdes pour les utiliser dans un code exécutable. :yaisse2:
Bonjour,
d'une manière générale, voir "About Dynamic-Link Libraries" :
http://msdn2.microsoft.com/en-us/lib...14(VS.85).aspx
:arrow: Plus spécifiquement pour l'export de fonctions, "Exporting from a DLL" :
http://msdn2.microsoft.com/en-us/library/z4zxe9k8.aspx
Tu peux typiquement en exportant la classe elle-même: http://www.developpez.net/forums/sho...d.php?t=259405
Mais la DLL ne sera utilisable ainsi que par des exécutables compilés avec le même compilateur.
La façon alternative de faire ça, c'est de faire une classe abstraite (typiquement une interface, même si le C++ ne sait pas vraiment ce que c'est) et d'exporter une fonction C qui retourne un pointeur vers un objet d'une classe dérivée de cette classe abstraite.
Code:
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 /*NomDeLaDLL.h*/ /* extern "C" : Pour les fonctions C et C++ accessibles dans les deux langages */ #ifndef EXTERN_C #ifdef __cplusplus #define EXTERN_C extern "C" #else #define EXTERN_C extern #endif #endif /* NOMDELADLL_API : Pour dllimport/export */ #ifdef BUILDING_NOMDELADLL #define NOMDELADLL_API __declspec(dllexport) #else #define NOMDELADLL_API __declspec(dllimport) #endif #ifdef __cplusplus class AUneClasseAbstraite { public: virtual int UneFonctionMembre(int) = 0; }; #else struct AUneClasseAbstraite; typedef struct AUneClasseAbstraite AUneClasseAbstraite; #endif EXTERN_C NOMDELADLL_API AUneClasseAbstraite* __stdcall CreerUnObjet(void); EXTERN_C NOMDELADLL_API void __stdcall DetruireObjet(AUneClasseAbstraite*);
Code:
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 //NomDeLaDLL.cpp #include "NomDeLaDLL.h class CUneClasse : public AUneClasseAbstraite { public: virtual int UneFonctionMembre(int a); }; int CUneClasse::UneFonctionMembre(int a) { return 2*a; } EXTERN_C NOMDELADLL_API AUneClasseAbstraite* __stdcall CreerUnObjet(void) { return new CUneClasse; } EXTERN_C NOMDELADLL_API void __stdcall DetruireObjet(AUneClasseAbstraite * pa) { CUneClasse *pObj = static_cast< CUneClasse* >(pa); delete pObj; }