axiagame
Messages postés8Date d'inscriptionjeudi 18 août 2011StatutMembreDernière intervention18 août 2011
-
4 oct. 2007 à 17:42
axiagame
Messages postés8Date d'inscriptionjeudi 18 août 2011StatutMembreDernière intervention18 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???
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 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.
axiagame
Messages postés8Date d'inscriptionjeudi 18 août 2011StatutMembreDernière intervention18 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
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 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.
axiagame
Messages postés8Date d'inscriptionjeudi 18 août 2011StatutMembreDernière intervention18 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