Une classe dans une DLL C++...?

Signaler
Messages postés
8
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
18 août 2011
-
axiagame
Messages postés
8
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
18 août 2011
-
Bonjour tout le monde...

voilà je vous expose le problème clairement :

Je suis en train de développer une application on va dire ludique en Cpp, avec une librairie qui utilise directX...

Jusque là, tout va bien, le souci est que VS8 se plante à la compilation, et laisse passer une exception qui devrait être capturée (après une infinité de tests, et même des catch(...), ça passe on est sûr à 100% que ca vient de VS8). J'ai donc décidé de créer une DLL pour y mettre le système complet de gestion des ressources de base pour mon projet ; ainsi elle me servira pour tous les projets.

Seulement, je ne sais pas comment on intègre une classe dans une DLL en C++, pouvez-vous m'aider???

Merci d'avance, @xi@g@me

4 réponses

Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
VS8.. tu veux dire VC2005 ?

En quoi créer une DLL te permettra d'éviter ton problème, ça sera toujours le même compilo ...
mais vu que je ne suis pas sûr de bien avoir compris le problème je vais quand même répondre à la question: de la même manière que pour quoi que ce soit d'autre :)

Tu fais ton .h ou .hpp qui définit ta/tes classes. Tu fais le .cpp qui correspond, tu compiles le tout en dll ( pour ça faut voir les options du linker, normalement ça se règle dans l'IDE à la création du projet : create new dll )
Regle le linker pour qu'il produise la dll dans le rep de l'exe.

Dans le projet du .exe tu fais un #include vers le .h, tu linkes avec le .lib que t'a donné la compil de la dll, et roulez jeunesse . Il n'y a qu'un define à faire dans le cpp qui fait l'include.

Attention ! le name mangling du C++ n'est absolument pas normalisé. Ca veut dire que dans le .lib, si tu compiles avec un compilo l'étiquette sera du genre __classe@@function_lkjh alors qu'avec un autre ça sera _@function&class_int_float , je dis ça parfaitement au hasard hein. Conclusion : prendre le même compilo pour la dll et le .exe qui l'utilise.   

_______________________

Omnia vincit labor improbus
http://calvin-studio.fr
Messages postés
8
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
18 août 2011

bonjour,

déjà merci pour ta réponse

oui, je parle de VC++ 2005...
pour la dll avec un .h et un .cpp, j'ai déjà essayé, mais ca marche pas tout simplement car le compilateur ne me créée pas de .lib, je n'ai qu'un .dll et un .h, ca serait trop facile...

après, l'exe et la dll sont tous les deux dans la même solution de VC++ 2005, donc pas de problèmes de compilo
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
S'il ne crée pas le .lib c'est qu'il y a une option que tu n'as pas cochée ... c'est pas normal.
essaye Linker->advanced->import library , mais je suis pas sûr, je connais pas bien VC.  

_______________________

Omnia vincit labor improbus
http://calvin-studio.fr
Messages postés
8
Date d'inscription
jeudi 18 août 2011
Statut
Membre
Dernière intervention
18 août 2011

alors en fait j'ai contacté un 'expert' en la matière qui m'a proposé de faire une bibliothèque de classes, pour résoudre mon problème avec un espace de noms... le souci est que le moteur 3D que j'utilise est en configuration MultiThread (/Mt), et cette configuration n'est pas compatible avec l'option /clr, qui est nécessaire pour ma bibliothèque de classes... En gros si je change la configuration de mon projet, je ne peux plus éditer les liens, et si je change celle de ma bibliothèque, je ne peux plus compiler ni l'un ni l'autre : traduction je crois que c'est mort, merci à tous quand même