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

doudouhic 7 Messages postés mardi 6 mai 2003Date d'inscription 26 février 2007 Dernière intervention - 24 févr. 2007 à 21:32 - Dernière réponse : doudouhic 7 Messages postés mardi 6 mai 2003Date d'inscription 26 février 2007 Dernière intervention
- 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
cs_azamharir 55 Messages postés jeudi 18 janvier 2007Date d'inscription 1 novembre 2008 Dernière intervention - 24 févr. 2007 à 22:08
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de cs_azamharir
cs_azamharir 55 Messages postés jeudi 18 janvier 2007Date d'inscription 1 novembre 2008 Dernière intervention - 24 févr. 2007 à 23:33
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
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 25 févr. 2007 à 02:39
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
cs_vicenzo 179 Messages postés mardi 16 août 2005Date d'inscription 25 août 2010 Dernière intervention - 25 févr. 2007 à 11:07
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
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 25 févr. 2007 à 11:34
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
cs_vicenzo 179 Messages postés mardi 16 août 2005Date d'inscription 25 août 2010 Dernière intervention - 25 févr. 2007 à 12:34
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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 25 févr. 2007 à 23:50
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
cs_vicenzo 179 Messages postés mardi 16 août 2005Date d'inscription 25 août 2010 Dernière intervention - 26 févr. 2007 à 13:14
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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 26 févr. 2007 à 13:19
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
doudouhic 7 Messages postés mardi 6 mai 2003Date d'inscription 26 février 2007 Dernière intervention - 26 févr. 2007 à 16:40
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.