Dll, exportation d'une classe, c possible, non !? [C++] - Programmation
Marsh Posté le 07-03-2002 à 18:06:48
Code :
|
sous Visual C++ vu que __declspec c specifique a microsoft (me semble)
[jfdsdjhfuetppo]--Message édité par deathsharp--[/jfdsdjhfuetppo]
Marsh Posté le 07-03-2002 à 18:18:07
Bien entendu n'espere pas la recuperer par un GetProc Adress
non ce n'est pas specifique a Visual, mais a la plateforme Windows...
Ming le reconnais aussi (malheureusement)...
Marsh Posté le 07-03-2002 à 21:01:03
weblook$ a écrit a écrit : class AX_EXT_CLASS uneClass { } |
et c koi AX_EXT_CLASS
Marsh Posté le 07-03-2002 à 22:15:18
euh non c'est AFX_EXT_CLASS,et ça sert justement à indiquer que l'on désire exporter cette classe.
Marsh Posté le 07-03-2002 à 22:18:19
et ca serai pas un peu des MFC ce truc tout moche...
c juste un def
Marsh Posté le 07-03-2002 à 22:23:51
effectivement mais vu que qu'il utilise des dll c'est que son prog ne marchera que sous WIN donc...MFC power.Quand on peut les utiliser pourquoi se priver ça simplifie la prog alors..(dans cette exemple on est d'accord ça revient au même)
Marsh Posté le 07-03-2002 à 23:03:22
weblook$ a écrit a écrit : effectivement mais vu que qu'il utilise des dll c'est que son prog ne marchera que sous WIN donc...MFC power.Quand on peut les utiliser pourquoi se priver ça simplifie la prog alors..(dans cette exemple on est d'accord ça revient au même) |
Ca oblige juste en enmener un paquet de Dlls...
Marsh Posté le 08-03-2002 à 09:29:27
BENB a écrit a écrit : Ca oblige juste en enmener un paquet de Dlls... |
ça oblige à livrer 1 seule Dll en plus.
Et encore, qd on fait un projet MFC, on peut attacher la dll au l'executable, ce qui fait qu'on se soucie même pas de cette dll, elle est avec l'exe (qui grossit d'un petit Mo du coup, ms finalement, on s'en tape !)
Alors, oui, vive les MFC, et merci tt le monde !
Et, de l'autre coté, pour récupérer cette classe, 'faut faire comment !?
Marsh Posté le 08-03-2002 à 09:37:38
t'inclues le lib + le .h dans ton projet.
Marsh Posté le 08-03-2002 à 09:44:18
Godbout a écrit a écrit : t'inclues le lib + le .h dans ton projet. |
Il y en a qui sont des experts
Marsh Posté le 08-03-2002 à 09:47:35
Godbout a écrit a écrit : t'inclues le lib + le .h dans ton projet. |
oui, ça j'aurai su, merci !
Ms g pas été assez précis (dsl) : en dynamique je veux dire...
[jfdsdjhfuetppo]--Message édité par El_Gringo--[/jfdsdjhfuetppo]
Marsh Posté le 08-03-2002 à 09:48:50
BENB a écrit a écrit : Il y en a qui sont des experts |
on se moque ??
Marsh Posté le 08-03-2002 à 09:50:26
El_Gringo a écrit a écrit : oui, ça j'aurai su, merci ! Ms g pas été assez précis (dsl) : en dynamique je veux dire... |
ben pour importer des fonctions d'une dll t'as deux facons, soit avec un lib + h (loadtime), soit avec un LoadLibrary + GetProcAddress (runtime).
Pour une classe tu dois forcement avoir le definition de ta classe dans ton projet, donc tu dois passer forcement par un loadtime.
Marsh Posté le 08-03-2002 à 09:59:39
Godbout a écrit a écrit : ben pour importer des fonctions d'une dll t'as deux facons, soit avec un lib + h (loadtime), soit avec un LoadLibrary + GetProcAddress (runtime). Pour une classe tu dois forcement avoir le definition de ta classe dans ton projet, donc tu dois passer forcement par un loadtime. |
Ouais, tu dois avoir raison.
Bon, bah merci tt le monde. ça me sera pas utile maintenant du coup, ms ça me servira bien un jour, c sur !
Marsh Posté le 08-03-2002 à 10:14:41
Pour une fois que je peux aider quelqu'un
Marsh Posté le 18-03-2008 à 12:10:57
deathsharp a écrit :
|
Merci Pour l'info ; mais comment utilise-t-on ensuite cette classe exportée ?
Marsh Posté le 18-03-2008 à 12:52:05
golden shovel là. LE post à *6 ans*
Pour info, c moche d'exporter des classes, mieux vaut exporter une simple fonction qui cree/detruit des instances
Marsh Posté le 18-03-2008 à 13:32:28
Joel F a écrit : golden shovel là. LE post à *6 ans* |
Le post a 6 ans, mais tu vois qu'on m'a repondu D'ailleurs je te remercie.
Disons que c'est moche d'exporter des classes, j'ai alors crée les fonctions qui cree et detruit des instances.
Mais je ne vois toujours pas comment les utiliser.
Un peu de code:
Code :
|
Marsh Posté le 18-03-2008 à 13:41:43
je viens de voir un truc ; est-il possible de faire ceci :
Code :
|
Evidemment, on inclut MaClasse.h
Marsh Posté le 18-03-2008 à 14:37:28
en gros ta une classe Toto dans ton DLL
Son constructeur prend en parametre un float et une int.
tu fais un :
Code :
|
Pour utilsier
Code :
|
Marsh Posté le 18-03-2008 à 17:07:43
Merci beaucoup c'est très clair comme réponse
Il ne reste plus qu'à tester ...
Marsh Posté le 18-03-2008 à 17:12:01
Aprés si tout tes objets héritent d'une interface qui va bien et que tu te donne une petite fonction factory, tu peut te remonter un mini-système façon COM
Code :
|
Marsh Posté le 19-03-2008 à 09:29:10
J'ai un autre problème. Quand je charge les DLL, je ne suis pas censé savoir si elle sont présentes ou pas. C'est-à-dire je ne chargerai que les DLL existentes. Donc je ne suis pas censé connaitre le nom de la classe ; ce que je sais c'est que mes DLL sont des classes filles d'une classe mère connue(=existe).
Avec ce que je viens de voir pour charger une DLL, je dois forcément connaitre le nom de la classe ..
Marsh Posté le 19-03-2008 à 09:51:32
ReplyMarsh Posté le 19-03-2008 à 10:17:05
Joel F a écrit : exporte une fonction par DLL qui te renvoit la liste des classes disponibles |
Là je ne comprends pas trop, je me suis mal expliqué je pense. En faite une DLL correspondra à une seule classe.
Marsh Posté le 19-03-2008 à 11:51:17
Ben, sur le même principe qu'à présenter Joel F au dessus. Admettons que la classe mère soit Foo, et que la classe fille présente dans la dll soit Bar:
Code :
|
et le build_addon_instance de cette dll précisément serait donc une instanciation d'un pointeur vers Bar.
Ton programme central, lui, n'as pas besoin de savoir autre chose que "cette dll permet de charger une instance de Foo*"
Marsh Posté le 19-03-2008 à 12:27:20
Merciii !!
Ceci marche si les fonctions sont virtuelles ! exact ?
Marsh Posté le 19-03-2008 à 12:33:02
Tout à fait; il peut y avoir des fonctions non virtuelles, mais ça servirait absolument à rien. Donc pense bien ton interface
Marsh Posté le 20-03-2008 à 14:58:55
Je n'ai toujours pas réussi ...
La compilation marche nikel ; mais j'ai une erreur lors de l'execution :
Code :
|
Voici comment je charge la Dll et appelle la fonction :
Code :
|
Le programme se bloque lorsqu'il veut exécuter la dernière ligne
Marsh Posté le 20-03-2008 à 15:07:23
Sur certains forum, on parle d'un fichier .def ; pour la compilation je n'ai pas utilisé un fichier comme tel ( je compile avec un Makefile, le compilateur est mingw)
Aussi j'ai vu parfois des << extern "C" >> Devrais-je le faire ?
Marsh Posté le 20-03-2008 à 15:14:38
Tu ne vérifies pas si DLLHandlet et Pointeur_Fonction sont valides, ce serait un bon début d'isoler la source de l'erreur.
Marsh Posté le 20-03-2008 à 15:43:07
sagopa a écrit : Sur certains forum, on parle d'un fichier .def ; pour la compilation je n'ai pas utilisé un fichier comme tel ( je compile avec un Makefile, le compilateur est mingw) |
A mon avis tu devrais rajouter cette déclaration dans les .h (et les .c). Sinon tes noms de fonctions vont être modifiées pour prendre en compte le polymorphisme du C++.
Marsh Posté le 20-03-2008 à 16:31:58
J'ai regardé les forums pour utiliser extern C mais il y a des utilisations differentes a chaques fois. Voici comment je fais :
Dans le .h
Code :
|
Dans le .cpp
Code :
|
Est-ce que c'est correct ?
Marsh Posté le 20-03-2008 à 18:19:22
Je pense que mon pb est : comment exporter une fonction membre.
J'ai trouvé pas mal de doc sur ce sujet, mais personne ne parle de ca ; je commence à croire que ce n'est pas possible ...
Rassurer moi la fct qui crée une instance de ma classe fait bien partie de ma classe ?!
Marsh Posté le 20-03-2008 à 18:38:14
Une méthode ne s'exporte pas. Une classe ou une fonction oui, le reste non.
Et non, la méthode créatrice de l'instance ne doit surtout pas être une méthode de classe vu que justement tu cherches à récupérer la classe.
Marsh Posté le 20-03-2008 à 22:26:42
ok je comprends pk ça ne marche pas. Par contre j'ai trouvé une piste, pour ceux ke ça interesse : http://www.codeguru.com/cpp/w-p/dl [...] .php/c123/
Marsh Posté le 07-03-2002 à 18:05:26
et on fait comment alors pour exporter une classe depuis une dll !? j'arrive pas à trouver dans la doc. Si qqn pouvait me dire ça, ça sert bien sympa !
Merci...