IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

include avec une convention d'appel


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Par défaut include avec une convention d'appel
    Bonjour,

    J'ai une lib compilée en __cdecl par défaut que je souhaite inclure dans mon projet __fastcall.
    Le hic c'est que les .h de la lib ne spécifient pas la convention d'appel.
    Et donc mon projet les voit comme des __fastcall et le link foire.

    Je n'ai pas envie de modifier les headers de la lib. Existe-t-il un moyen pour les inclure avec une convention par défaut en __cdecl?
    Du genre (un peu comme extern "C"):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    __cdecl{
    #include "malib.h"
    }

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533

  3. #3
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par damiengif Voir le message
    Je n'ai pas envie de modifier les headers de la lib.
    Hello,

    Ce serait pourtant le plus simple / propre.
    Si tu peux modifier les headers et recompiler, fais le.

    Sinon, un extern "C" {...} dans le header (sans recompiler) ne marche pas ? La convention d'appel en C est __cdecl, qui est forcée par extern "C".

    Il est possible de wrapper chaque fonction dans une fonction avec la bonne convention d'appel aussi (mais c'est long et chiant).

    Citation Envoyé par damiengif Voir le message
    Et donc mon projet les voit comme des __fastcall et le link foire.
    Chanceux ! je me suis tapé plusieurs heures de debug à cause d'une mauvaise convention d'appel cette semaine.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    extern "C" (name mangling) et convention d'appel sont complètement orthogonaux.

    Personnellement je recommande la solution de cob59: Déclarer explicitement tes fonctions en __fastcall (en passant par un #define intermédiaire, genre #define MONPROJETCALL __fastcall) et ensuite configurer Visual pour qu'il considère les fonctions __cdecl par défaut... (ce qui est le cas quand on ne précise pas déjà une telle option, normalement).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Par défaut
    OK, la solution miracle que je cherchais n'existe donc pas .
    Je pense que je vais plutôt choisir la solution la moins lourde : rajouter des __cdecl dans les headers de la lib.

    Merci pour toutes vos solutions

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le projet sur lequel tu bosses est donc beaucoup plus gros que la lib et tu es prêt à refaire ce manège à chaque mise à jour de celle-ci?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Par défaut
    Exactement. Toutes les dépendances sont elles aussi en __fastcall par défaut, et je me vois mal expliquer à mon boss qu'il faille modifier tout notre code pour intégrer une petite modif.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec une liste d'appel
    Par jockyboss777 dans le forum OpenGL
    Réponses: 2
    Dernier message: 19/05/2009, 14h03
  2. include avec une variable comme en php
    Par alain57 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/12/2008, 17h08
  3. Problème d'include avec une section critique.
    Par radicalrider dans le forum Visual C++
    Réponses: 21
    Dernier message: 12/07/2006, 15h38
  4. [C#][WebServices] Appel methode avec une classe en paramètre
    Par bran_noz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 16h41
  5. Appeler une API sans liaison avec une DLL
    Par mat.M dans le forum x86 32-bits / 64-bits
    Réponses: 10
    Dernier message: 13/07/2004, 02h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo