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 :

Savoir si une dll est 32 ou 64 bits


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Savoir si une dll est 32 ou 64 bits
    Bonjour,

    Je charge dynamiquement des fonctions dans mon code à partir d'une dll. Seulement, je develope 2 versions du code et de la dll, en 32 et 64bits. Sachant que c'est probablement systeme dépendant, comment puis-je à partir de mon code en C++ savoir si la dll que je charge est 32 ou 64 bits. C.a.d si elle correspond bien à la version du code en question. En gros y a t-il des fonction API windows et linux me permettant de savoir ca.

    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Un processus x bits ne peut tout simplement pas charger une DLL qui n'est pas x bits .

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui je le sais, ma question etait comment par code determiner cette incompatibilité.

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Tu veux en fait examiner un fichier sur le disque, avant de le charger alors ? Il n'y a pas d'API pour faire cela, il faut aller soi-même chercher l'info dans les en-têtes du fichier, à savoir le champ Machine de l'en-tête IMAGE_FILE_HEADER dans notre cas. Pareil dans le cas où la DLL est en mémoire, sachant que le HMODULE d'une DLL n'est rien d'autre qu'un pointeur vers elle-même.

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ben en cherchant un encore un peu j'ai résolu le probléme sous linux avec le bout de code ci-dessous. Je n'ai pas encore trouvé l'équivalent sous windows, mais on doit pouvoir faire un équivalent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void *DLLHandle = dlopen (my_lib.so,RTLD_LAZY);
    if (DLLHandle==NULL) {
       char *dler=dlerror();
       if (dler!=NULL) {
          if (strstr(dler,"ELFCLASS32")!=NULL || strstr(dler,"ELFCLASS64")!=NULL) mess_error="Incompatible 32bits library for 64bits executable code or vis versa");
       }
    }
    Ca fonctionne bien, quand je charge une dll 32 bits de mon exe 64bits ou vis versa.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Tu pourrais envisager de prévoir un défine en fonction du type de compilation utilisé sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifdef __WIN32_   //pas sur du tout que cela suffise :-P
    #define BITVERSION 32
    #else
    #define BITVERSION 64
    #endif
     
    /* DLL_API */ const int bitVersion = BITVERSION
    Il te suffurait alors, au moment où tu utilise la dll, de vérifier la valeur de bitVersion...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Savoir si une dll est chargé
    Par Invité dans le forum Débuter
    Réponses: 4
    Dernier message: 24/12/2013, 18h26
  2. Réponses: 2
    Dernier message: 25/02/2012, 00h33
  3. Comment savoir si une DLL est COM visible ?
    Par sokai dans le forum C#
    Réponses: 5
    Dernier message: 05/08/2011, 13h32
  4. Savoir sous quoi une DLL est appelée ?
    Par Lino Léum dans le forum Framework .NET
    Réponses: 2
    Dernier message: 24/06/2010, 21h45
  5. [VB6] [Impression] Savoir si une imprimante est installée
    Par Norm59ttp dans le forum Installation, Déploiement et Sécurité
    Réponses: 2
    Dernier message: 19/12/2002, 09h29

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