Boost + convention d'appel __stdcall ? [résolu] - C++ - Programmation
Marsh Posté le 05-12-2008 à 11:34:36
Ben déjà poste le code en question (ou au moins la partie problématique) parce que dis comme ça, c'est pas évident ...
(Question de routine : t'as cherché dans google ?)
Marsh Posté le 05-12-2008 à 12:07:49
Oui j'ai cherché de Google, mais rien de convainquant.
Pour le code :
Code :
|
Code :
|
Et voici ce que me dit le compilateur :
Code :
|
Comme dit précédemment, j'ai bien inclut boost_system-vc80-mt-1_36.lib dans les paramètres de link
Marsh Posté le 05-12-2008 à 14:33:03
visual studio ??
as tu bien mis le type d'appel proprement dans les settings du projet ?
Marsh Posté le 05-12-2008 à 15:55:35
Oui Visual Studio 2005.
Et oui, j'ai mis __stdcall comme convention d'appel dans les propriétés du projet (C++/Avancé/Convention d'appel).
Marsh Posté le 07-12-2008 à 15:40:01
J'ai récupéré l'installeur (http://www.boostpro.com/products/free) qui fournit les binaires. Je n'ai donc pas compilé moi-même Boost.
Marsh Posté le 07-12-2008 à 15:45:12
J'ai aussi posé la question sur la ML boost-users, et effectivement il semblerait que je doive compiler Boost avec la convention d'appel désirée.
Je trouve que c'est pas du tout pratique. Ça serait la seule solution ?
Marsh Posté le 07-12-2008 à 16:29:12
bah tu peut guere faire autrement. l'installeur basique de boost n'ets que ça : basique.
Pour les cas non-standards, reste l'instalateur manuel.
Enfin, perso, ca me choque pas plsu que ça sous linux.
Marsh Posté le 07-12-2008 à 20:35:50
Oui ok, mais c'est pas ce que je voulais dire.
Ce que je me demandais, c'est s'il n'existe pas un moyen d'appeler une fonction "__cdecl" à partir d'une fonction "__stdcall".
Par exemple, est-ce qu'il n'existe pas un équivalent à "extern "C"" signifiant qu'on met du code C dans du code C++, pour les conventions d'appel.
Marsh Posté le 08-12-2008 à 09:23:11
Les conventions en __ modifie la manière dont les arguments sont passés au fonction (registre/piles/mémoires) au niveau du binaire.
Donc ta fonction __cdecl a du code x86 pr aller pécher les arguments à l'endroit X. Pas moyen depuis un source externe de modifier ça.
Marsh Posté le 08-12-2008 à 10:14:44
Ah ouais ok. Merci pour ton aide.
Marsh Posté le 05-12-2008 à 10:59:08
Bonjour,
Je suis en train de réaliser une dll au format COM sous Visual 2005. Pour qu'elle soit au format COM, la convention d'appel doit être __stdcall.
Dans mon projet, j'aurais besoin de rajouter un peu de Boost, histoire de me simplifier la vie.
Le problème est que le compilateur m'envoie chier à l'édition de liens : j'ai des symboles externes Boost non-résolus alors que j'ai bien inclus le bon .lib.
En essayant divers solutions, je me suis rendu compte qu'en changeant la convention d'appel en __cdecl, le projet de compile correctement. Malheureusement je ne peux pas enregistrer ma DLL avec regsvr32, le format n'est pas le bon.
Auriez-vous une idée/solution ?
Merci d'avance.
Message édité par Riot le 08-12-2008 à 10:15:56
---------------
Be the one with the flames.