Creer une DLL en c++ avec POO

Résolu
doudouhic Messages postés 7 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 26 février 2007 - 24 févr. 2007 à 21:32
doudouhic Messages postés 7 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 26 février 2007 - 26 févr. 2007 à 16:40
Bonjour tout le monde,

J'ai deja travailler sur un projet en VC++, et j'aimerai transformer mes classes en DLL que je pourrai exploiter plus tard dans d'autres projets.


Mon probléme est que pour la création des DLL, tous les documents que j'ai trouvé programme en C, il n'ya pas de classes. comment en créer une DLL tout en gardant l'aspect Orienté Objet pour des classes génériques.


Est ce que à la fin mes DLL pourrai être utiliser avec Java par exemple.


Merci d'avance.

10 réponses

cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008
24 févr. 2007 à 22:08
salut
tu utilise quel compilateur ?
si c Visual Studio 6.0 alors :
tu creer un projet mfc appwizard(dll)
puis tu choisi mfc extension dll
tu ajoute les fichiers de ta classe ds le projet et tu ajoute AFX_EXT_CLASS
exemple :
class AFX_EXT_CLASS mobile 
{
    int num,chrono;
    COLORREF color;
    CPoint XY;
public:
    int& get_chrono();
    mobile(int=20,int=10,int=1,int=0);
    void draw(CDC*);
    void avancer(int);
    virtual ~mobile();
    int get_x();
    void set_y(int n);
    void set_num(int);
    void set_color(COLORREF);   
};
3
cs_azamharir Messages postés 55 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 1 novembre 2008
24 févr. 2007 à 23:33
salut
non une dll mfc ne peut pas etre exploiter par d'autres langages comme l'est la dll classique.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 févr. 2007 à 02:39
ça s'apelle une DLL d'extension et si tu avais chercher tu aurais certainement trouver ça

http://www.cppfrance.com/codes/DLL-EXTENSION-LIENS-DANS-VOS-APP_40674.aspx

#include
0
cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
25 févr. 2007 à 11:07
Salut,

Sous Win32, les dll utilisent une convention d'appel C. C'est pour ca que quasiment tous les sources de dll que tu peux touver sont dans des languages procédural (c, pascal, ..). Les Dlls sont alors "language indépendante" et un exe ecrit dans un language 1 peut appeler un dll d'un language B du moment que la même convention d'appel est utilisée.

TU peux aussi créer des dlls qui exportent des classes avec des languages OOP. Tu peux exporter tes classes MAIS DEUX ENORMES LIMITATIONS :

    * l'exe et la dll doivent avoir été compilées avec le MEME compilo car la décoration des nom de fonction sera différente et même les ABI seront différentes !
    * Faire au config et linkage : par exemple, un exe en mode release et un dll en mode débug te feront surement crasher l'appli sur un 'delete'

Donc, exporter des classes dans un dll c'est cool que si tu est sur que la dll ne sera utilisées que par ton appli ou des aplis compilées avec les mêmes options et le même compilo... Donc exit une utilisation par Java.

C'est pour ca que les dll c++ n'ont jamais connues un grand essor..
 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
25 févr. 2007 à 11:34
Salut,
A mon avis, le meilleur moyen d'exporter les classes d'une DLL est de prévoir une fonction appelable à partir de n'importe quelle application. Cette fonction crée une instance d'une classe et retourne un pointeur. Une autre fonction assurera la destruction de cette instance. Les deux fonctions sont exportées de manière standard afin de permettre aux applications de les utiliser normalement quelque soit le langage avec lequel elles sont conçues.
0
cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
25 févr. 2007 à 12:34
Petite remarque sur la méthode de racpp, qui contourne les soucis d'allocation  / désallocation entre app et dll ainsi que ceux des décorations de nom de fonction, mais la ou je ne suis pas d'accord, c'est que si racpp entends par "pointeur", un pointeur sur une instance de la classe, ne ne résoud  rien si la classe possède des fonctions virtuelle car l'ABI générée par chaque compilo est différente (ordre inverse entre VC et BCB, par exemple)...
 
Exe : classe deux fonctions a(int) et b(double, double)
Donc , si le compilo de l'exe et différent du compilo de la dll, dans l'exe in appelle  mon_pointeur->b(int, int) et on réalité, on apelle q() et ca plante...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 févr. 2007 à 23:50
vicenzo > La convention d'export DLL est stdcall et non celle du C (cdecl). VB, VBA et autres anciens interprétés seraient incapables d'appeler du cdecl et surtout de replacer ESP en sortie de fonction.

ciao...
BruNews, MVP VC++
0
cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
26 févr. 2007 à 13:14
BruNews,

Autant pour moi, je devais être en train de mater un épisode de casimir en sirotant un verre de thérebentine quant j'ai ecris la phrase "les dll utilisent une convention d'appel C"....

.Reste que exporter de classes c++ dans des dlls n'est pas en général la meilleure des choses à faire si on veut un système un tant soit peu ouvert...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2007 à 13:19
C'est bien clair, une DLL est faite pour fournir un jeu de fonctions prêtes à l'emploi, correctement testées et optimisées comme il se doit.

ciao...
BruNews, MVP VC++
0
doudouhic Messages postés 7 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 26 février 2007
26 févr. 2007 à 16:40
Bonjour,


Merci pour votre aide, en faite j'y suis arrivé, comme a dit azzamharir le moyen le plus simple d'exporter une classe dans une dll est d'utiliser AFX_EXT_CLASS. Cependant seux incovénient pour cette méthode on doit mettre avec la DLL le fichier .LIB et la classe .h.
Moi ce que je voulais avant tout c'est caché mon code source, mais avec le fichier .h, n'importe qui peut reimplimenter la classe et l'utiliser.
Enfin, pour cacher son code source, il faut utiliser les pointeurs sur la classe et ses fonctions ce qui doit être beaucoup plus defficile.
0
Rejoignez-nous