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

C++ Discussion :

Taille des types entre un exe et une dll compilés avec différents compilos


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Par défaut Taille des types entre un exe et une dll compilés avec différents compilos
    Bonjour,
    J'espère que la question n'a pas été traitée plusieurs fois et que je n'aurais pas trouvé dans mes recherches...

    Nous avons un executable 32bits qui charge une dll 32bits, cette dernière exposant un certain nombre de fonctions. (Jusque là rien que de très classique )

    La dll doit pouvoir être compilée avec n'importe quel compilateur.

    Se posera-t-il un problème pour la taille des types transitant entre les deux ?

    bool, int, enums, long risquent-ils d'être plus ou moins grands et ainsi faire péter l'exe ?
    Quid des structures ?

    Nous avons déjà éliminé l'hypothèse d'utiliser des classes, car elles seraient selon toute probabilité stockées différemment en mémoire. (Un header regroupant les types définis sera compilé de chaque côté)

    Comment le cas est-il géré pour les dll qu'on trouve en liberté dans la nature ? existe-il un risque que les données passées ne fassent pas la même taille entre l'appelant et l'appelé ?

    (Sans parler de compilateurs 64bits ou 16bits ici, merci.)

    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    1- Mauvais forum

    2- Investissez dans Imperfect C++ de Matthew Wilson, chez Addisson-Wesley, un chapitre (voire plus) est consacré à ces problèmes.

    Sinon, sur un même OS, je serai surpris que les tailles des types changent vu que normalement on est censé avoir la compatibilité au niveau C. Au pire, indiquez très exactement ce que vous voulez utiliser.
    Par contre, pour les aggrégats, attention aux alignements.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Par défaut
    Merci,

    Quel serait-le bon forum ? Sachant que nous serons effectivement sur le même OS (windows 32 bits, XP/2000) pour la dll et l'exe, et que ce sera du C++ des deux côtés.

    A propos de la compatibilité au niveau du C, c'est justement là dessus que nous nous posions des questions, merci pour ces premières indications.

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Sur les techniques particulières pour simuler des classes, ici peut-être.
    Sinon ... "dev windows" ? Mais bon, le risque est je pense nul vu que ces types sont censés être compatibles au niveau de l'interface C (aux détails d'alignement)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Il n'est pas si nul, par exemple un int du C n'est pas la même chose qu'un integer en VB. Il y a une correspondance entre différents types de différents langages, mais elle n'est pas forcément immédiate à trouver.

    Si on veut avoir des classes dans des DLL sous windows, soit on se limite en terme de langage/compilateurs compatibles, soit on fait du COM (beark, même si c'est un peu moins beark que ça l'a été).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Par défaut
    Citation Envoyé par JolyLoic
    un int du C n'est pas la même chose qu'un integer en VB.
    Ma grande interrogation est : un int du C compilé avec VC++98 (par ex.) est il la même chose qu'un int du C compilé avec GCC ou Borland C++.
    Puis-je partir du principe qu'absolument 100% des compilos vont utiliser 4 octets pour leurs int ? (Je crois me souvenir que le standard n'impose pas de taille précise, mais juste un ordonnancement entre les short,int, et longs )

    Sachant que je développe le programme principal qui va appeller une sorte de Plugin sous la forme d'une dll développée par un tiers, sous un compilateur éventuellement différent du mien.

    Comment puis-je connaitre les petites différences entre les compilos, au niveau de l'alignement des octets dans le stockage des structures par exemple ?
    Existe-il une doc regroupant ces infos, ou il faut se palucher les manuels de tous les compilateurs possibles ?

    Est-ce que c'est un risque tangible, ou plutôt insignifiant, s'il existe un consensus entre les divers compilateurs à ce propos.

    merci

Discussions similaires

  1. compatibilté entre un exe et une dll
    Par damiengif dans le forum Visual C++
    Réponses: 1
    Dernier message: 25/02/2013, 17h22
  2. Réponses: 7
    Dernier message: 23/10/2012, 17h17
  3. Réponses: 6
    Dernier message: 18/01/2011, 15h37
  4. Différence entre taille des types
    Par geek21 dans le forum Débuter
    Réponses: 3
    Dernier message: 18/08/2009, 15h34
  5. Linker avec une DLL compilée avec MSVC6
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2006, 21h46

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