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

Windows Discussion :

version 16 ou 32 bits


Sujet :

Windows

  1. #1
    Membre du Club Avatar de Stevie Wonder
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 55
    Points
    55
    Par défaut version 16 ou 32 bits
    Bonjour,
    j'aurais voulu savoir comment faut il faire pour detecter si je suis sous une version 16 ou 32 bits. Ca serait a implementer dans du code C bien entendu. Et le flag a utiliser afin de filtrer les fichiers en tete compatible 16 et 32 bits.

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    j'aurais voulu savoir comment faut il faire pour detecter si je suis sous une version 16 ou 32 bits
    Je ne comprends pas trop la question... Il s'agit de détecter si le système d'exploitation Windows est en 16 (windows 3.x et inférieur ou DOS) ou 32 bits (windows 9x et sup.), c'est bien ça ?

    À partir du moment où tu compiles ton programme, tu le compiles pour une version spécifique (16 / 32 / 64 bits). Même si l' O.S est une version supérieure (disons que ton programme est compilé en 16 bits et que tu es sous un Windows 32 bits), ton programme s'exécute dans une machine virtuelle, il lui semble alors qu'il est dans un environnement 16 bits, même si l'O.S est réellement un O.S 32 bits.

    La machine virtuelle empêche de toute façon toute accession à l'O.S 32 bits par mesure de sécurité.

    J'ai peut être répondu à coté de la plaque, je ne suis pas sûr d'avoir compris la question

  3. #3
    Membre du Club Avatar de Stevie Wonder
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 55
    Points
    55
    Par défaut
    Merci de ta réponse, en me relisant je realise que j'ai ecris au fil de mes pensées et que c'est tres confus.
    Citation Envoyé par Neitsa
    À partir du moment où tu compiles ton programme, tu le compiles pour une version spécifique (16 / 32 / 64 bits).
    C'est justement ca que j'aimerais savoir. Si il y a une façon d'indiquer a mon programme sous quelle version je suis. Un flag, une variable ou autre.

  4. #4
    Membre du Club Avatar de Stevie Wonder
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 55
    Points
    55
    Par défaut
    Ok je crois avoir trouvé une façon, avec un decalage de bits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #if (1 << 31) == 0
     /* alors on est sous une version inferieur a 32 bits */
    #else
     /*alors on est sous une version superieur/egale a 32 bits */
    Si on decale le bit 0 de 31 fois, il va devenir le bit 31. Par contre sous 16 bits, il va etre pousse en dehors et donc apu.

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 379
    Points
    20 379
    Par défaut
    Nan le compilateur est spécifique à l'OS comme Neitsa l'a dit; si il compile en 16bits le programme sera destiné à un OS 16bits comme win3.1.
    Les entiers non signés par exemple n'ont pas le même nombres d'octets selon un exe pour OS 16bits ou 32bits

  6. #6
    Membre du Club Avatar de Stevie Wonder
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 55
    Points
    55
    Par défaut
    Ben j'ai pas dis le contraire, mais ce que je cherche a determiner est en amont de ce que tu me dis. Ce que je cherche c'est comment savoir sous quelle version de l'OS je suis

  7. #7
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Si j'ai bien compris, tu cherche à faire un programme dont le source soit cross-compilable aussi bien en 16 bits qu'en 32 bits ?

    Hmmm... si tu veux le faire avec le preprocesseur C, tu peux essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include ...
    #include <limits.h>
    
    #if INT_MAX >= 0x7FFFFFFF
    	#define CODE_32_64_BITS // 32 bits ou supérieur !
    #else
    	#define CODE_16_BITS // 16 bits ou inférieur !
    #endif
    
    int main(void)
    {
        #ifdef CODE_32_64_BITS
        printf ("hello : programme 32 ou 64 bits");
        #elif CODE_16_BITS
        printf ("hello : programme 16 bits");
        #endif
    
    return 0;
    }
    Si tu veux le faire au runtime (mais là je ne saisi pas l'utilité, vu que tu sais à l'avance pour quel type d'O.S tu va compiler), tu peux utiliser l'opérateur sizeof sur un int

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    size_t intsize = sizeof(int);
    
    if (intsize == 4)
       printf ("prog 32 bits");
    else if (intsize == 2)
       printf ("prog 16 bits");

  8. #8
    Membre du Club Avatar de Stevie Wonder
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 55
    Points
    55
    Par défaut
    Merci beaucoups

    Il y a une utilité si, c'est que les programmes que je developpe (client et serveur) vont etre utilisés/compilés sur plusieurs machines de types differents (pour etre precis, des caisses enregistreuses... je sais ca a l'air bizarre comme ca) dans le but du stage que je realise.

  9. #9
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 379
    Points
    20 379
    Par défaut
    Je ne pige vraiment pas ton problème ; excepté des OS comme Linux qui ne sont entièrement que 32bits , sous Windows par exemple tu peux parfaitement faire tourner des applis 16 bits ou bien 32bits.
    Evidemment le mieux c'est 32bits
    Par contre il ya des API Windows 16bits qui fonctionneront mal sous Win XP par exemple.
    Tu peux prendre des macros comme #ifdef _WINNT regarder dans le MSDN

  10. #10
    Membre du Club Avatar de Stevie Wonder
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 55
    Points
    55
    Par défaut
    Il y a des soucis d'incompatibilités/sécurité avec certaines fonctions (notemment ce qui concerne les sockets, il me semble).

  11. #11
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 379
    Points
    20 379
    Par défaut
    Citation Envoyé par Stevie Wonder
    Il y a des soucis d'incompatibilités/sécurité avec certaines fonctions (notemment ce qui concerne les sockets, il me semble).
    A ce moment là et cela rajoute quelques lourdeurs il faut utiliser des directives de précompilations qui selon l'OS appellent les bonnes fonctions

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/11/2011, 19h54
  2. Réponses: 4
    Dernier message: 26/10/2011, 09h39
  3. Vérification version 32 ou 64 bits W2k3
    Par Edgherardi dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 27/07/2009, 18h08
  4. Existe - il une version 64 bits
    Par Gaiiak dans le forum Bubuntu
    Réponses: 3
    Dernier message: 10/09/2008, 12h43
  5. Version 5.0 compatible AIX 5.3 64 bit ?
    Par psyche dans le forum Administration
    Réponses: 1
    Dernier message: 05/04/2006, 09h47

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