Importer une classe dans une dll

ilimo Messages postés 32 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 2 juin 2006 - 30 déc. 2003 à 14:38
ilimo Messages postés 32 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 2 juin 2006 - 31 déc. 2003 à 08:56
bonjour :
j'ai deux programmes : Pa Pb
Pa contient la classe Ca
Pb contient la classe Cb

Pb est une dll pour Pa

comment importer la classe Cb dans la classe Ca ?

je voudrais declarer un pointeur de type Cb dans la classe Ca

merci pour votre aide..

5 réponses

MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
30 déc. 2003 à 14:50
Dans ta dll (Pb) :
extern "C" __declspec(dllexport) Cb importClasse(void);

Puis :
Cb importClasse(void)
{
//ici tu mets le tout
return Cb;
}

Puis dans ton exe :
extern "C" __declspec(dllimport) Cb importClasse(void);

Puis tu cree un objet temp pour stocker cb :
Cc = importClasse();
et tu copies t objet un a un...
N'oublie pas de mettre le fichier .lib que tu aura apres la compilation de la dll, dans le dossier ou tu compile l'exe !!
0
ilimo Messages postés 32 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 2 juin 2006
30 déc. 2003 à 21:41
Je ne comprends pas le terme " importClasse "!!

j'utilise C++ , Visual.net C++

------------------------------------------------------
voici comment je fais et ça ne marche pas..
peut-êtrre qu'en voyant pon code,
quelqu'un pourra trouver l'erreur :

------------------------------------------------------
1- j'ai deux projets :
P1 : DLL ( c'est le dll que je crée )
P2 : EXE ( il se set de la dll que je crée )

------------------------------------------------------
2- P1 :
DLL.h cotient :
//Debut---------------------------------------------

#include <windows.h>

class __declspec(dllexport) Donald
{
private:
int Doc; // pour compter
public :
Donald(); // constucteur
void Bonjour(); //une fonction membre pour compter
};

//fin-------------------------------------------------

DLL.cpp contient :
//debut----------------------------------------------

#include "DLL.h"

Donald::Donald()
{
Doc = 0;
}

void Donald::Bonjour()
{
Doc += 1;
}

//fin--------------------------------------------------

3- je compile, et je crée ma dll.
4- j'obtiens :
un fichier : DLL.lib
et un fichier : DLL.dll

-------------------------------------------------------
5- P2 : EXE :
6- j'incorpore les deux fichiers précedents dans ce projet P2

EXE.h contient :
//debut-----------------------------------------------

#include <windows.h>

//la classe que j'ai créé dans dll :

class __declspec(dllimport) Donald;

//une nouvelle classe qui contient un pointeur type Donald :

class Mickey
{
private:
Donald *d;
int Moc;

public:
Mickey(); //constructeur
void Bye(); //un fonction membre pour compter
};

//fin----------------------------------------------------

EXE.cpp contient :
//debut-------------------------------------------------

#include "Mickey.h"

Mickey::Mickey()
{
d = new Donald();
Moc = 0;
}

void Mickey::Bye()
{
Moc -= 1;
}

//fin------------------------------------------------------

7- quand je compile le P2, voici le message d'erreur que j'ai :

error C2512: 'Donald' : aucun constructeur par défaut approprié disponible

8- pourquoi ça ne marche pas ?
9- j'oublie un mot clé ou
10- il faut faire d'une autre manière ?

------------------------------------------------------------

j'espère que c'est clair,
désolé si c'est long,
je suis sur le point d'exploser,
merci pour votre aide précieuse
0
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
30 déc. 2003 à 22:34
Des que jai le temps je te dirais .. le terme Importe classe est le nom d'une fonction que j'ai inventé pour te servir d'exemple !!
0
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
31 déc. 2003 à 00:50
J'ai bien lu et je ne vois pas trop l'interet de ce que tu essais de faire pq tu ne cree pas directement la classe hors de la dll? une dll peut etre modifiable or en changeant de dll la tu rend totalement hors d'usage cette avantage !
Ou alors ton but est peut etre d'avoir moin ds ton exe dans ce cas la cree ton objet donald ds la dll et envoie a l'exe un pointeur vers cet objet à partir d'une fonction !
0

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

Posez votre question
ilimo Messages postés 32 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 2 juin 2006
31 déc. 2003 à 08:56
l'interêt est d'apprendre..
au lieu d'envoyer tout mon code qui est top long et dépend d' autes classes, j'ai créé ce petit pogramme simple pour simplement comprendre comment ça marche..

sinon tu as raison, ça fait même pas 1 KO si je mets tout ensemble..

sinon ton idée me semble interessant mais l'ennui c'est que le type de retour de la fonction doit être du type de la classe de l'objet que je crée , donc le programme va refuser puisquu'il ne connaît que les types prédéfinis par le C++..

par contre si je mets le .h de ma dll (en plus de la dll et .lib) dans le .h de mon exe ça semble marcher...

je pensais qu'en mettant seulement :
class __declspec(dllimport) Donald;

dans le .h de mon exe et en reliant le .lib à mon projet et en mettant le .dll dans mon projet,
le programme pouvait comprendre qu'il faut qu'il aille chercher la classe dans le .dll

apparement ce n'est pas comme ça..

alors on mettra le .h de la dll dans le .h de l'exe..

tant pis..

merci pour ton aide..
0
Rejoignez-nous