Creer une DLL en c++ avec POO [Résolu]

Messages postés
7
Date d'inscription
mardi 6 mai 2003
Dernière intervention
26 février 2007
- - Dernière réponse : doudouhic
Messages postés
7
Date d'inscription
mardi 6 mai 2003
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.
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
55
Date d'inscription
jeudi 18 janvier 2007
Dernière intervention
1 novembre 2008
3
Merci
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);   
};

Merci cs_azamharir 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_azamharir
Messages postés
55
Date d'inscription
jeudi 18 janvier 2007
Dernière intervention
1 novembre 2008
0
Merci
salut
non une dll mfc ne peut pas etre exploiter par d'autres langages comme l'est la dll classique.
Commenter la réponse de cs_azamharir
Messages postés
1791
Date d'inscription
lundi 22 novembre 2004
Dernière intervention
31 janvier 2009
0
Merci
ç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
Commenter la réponse de cs_Joky
Messages postés
179
Date d'inscription
mardi 16 août 2005
Dernière intervention
25 août 2010
0
Merci
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..
 
Commenter la réponse de cs_vicenzo
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
0
Merci
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.
Commenter la réponse de racpp
Messages postés
179
Date d'inscription
mardi 16 août 2005
Dernière intervention
25 août 2010
0
Merci
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...
Commenter la réponse de cs_vicenzo
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
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++
Commenter la réponse de BruNews
Messages postés
179
Date d'inscription
mardi 16 août 2005
Dernière intervention
25 août 2010
0
Merci
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...
Commenter la réponse de cs_vicenzo
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
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++
Commenter la réponse de BruNews
Messages postés
7
Date d'inscription
mardi 6 mai 2003
Dernière intervention
26 février 2007
0
Merci
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.
Commenter la réponse de doudouhic

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.