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

axiagame Messages postés 8 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 18 août 2011 - 4 oct. 2007 à 17:42
axiagame Messages postés 8 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 18 août 2011 - 7 oct. 2007 à 21:51
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

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
5 oct. 2007 à 14:00
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
0
axiagame Messages postés 8 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 18 août 2011
6 oct. 2007 à 14:47
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
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
6 oct. 2007 à 17:57
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
0
axiagame Messages postés 8 Date d'inscription jeudi 18 août 2011 Statut Membre Dernière intervention 18 août 2011
7 oct. 2007 à 21:51
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
0
Rejoignez-nous