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 :

Détection Mac et Windows 98


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut Détection Mac et Windows 98
    Bonjour

    Je suis nouveau en C++ et je souhaiterais détecter la version de Windows ou de Mac de mon application hôte (XP, 98, OSx 10 , OSx 9..).

    Un début de code est :
    #ifdef WINDOWS

    #elseif MACINTOSH

    #endif

    Merci pour toutes réponses

  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
    Quand j'ai besoin de savoir ce genre de choses, je regarde dans le code de bibliothèques portables.
    Mais pourquoi veux-tu faire cela ? N'y a-t-il pas déjà une biblio portable qui rend le service que tu cherches à implémenter ?

    Accessoirement, en général ce sont des infos sur les compilos que l'on obtient de la sorte. Sur les versions d'OS, j'en suis moins sûr surtout que l'on fait régulièrement dans la cross compil' (compilé sous NT, exécuté sous XP, ...)
    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
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Luc Hermitte
    Quand j'ai besoin de savoir ce genre de choses, je regarde dans le code de bibliothèques portables.
    Mais pourquoi veux-tu faire cela ? N'y a-t-il pas déjà une biblio portable qui rend le service que tu cherches à implémenter ?
    Et quand il n'y en a pas, ou qu'elles sont trop lourdes à mettre en oeuvre, j'ai tendance à organiser le code comme une bibliothèque portable: interface qui ne dépend en rien de l'OS (elle n'inclu même pas les fichiers propres à l'OS), implémentation propre à l'OS. Et alors avoir un fichier d'implémentation par OS ou par famille d'OS (POSIX) est souvent mieux que de faire de la compilation conditionnelle.

    C'est le système de build qui gère donc cela -- comme il est de toute façon obligé de gérer d'autres choses propres à l'environnement comme le nom des compilateurs et la manière de leur passer les options. S'il le faut le système de build peut fournir des define propres à l'OS aussi; mais le besoin est généralement signe que l'organisation pourrait être améliorée.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    Une bibliothèque potrable est un .h non ?

    Le but de mon projet est de créer un Xtra Director qui détecte l'OS de l'application hôte.

    Auriez-vous une idée comment l'implémenter et quelles bibliothèques utilisées ?

  5. #5
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Citation Envoyé par MABB
    Une bibliothèque potrable est un .h non ?

    Le but de mon projet est de créer un Xtra Director qui détecte l'OS de l'application hôte.

    Auriez-vous une idée comment l'implémenter et quelles bibliothèques utilisées ?
    Le code que tu nous montre ne détecte pas l'application Hote. Il s'agi de conditions fournit au compilateur.

    En gros, pendant la compilation il ne s'occupera que de la partie windows ou mac suivant le systeme d'exploitation sur lequel tu compile. Mais a l'éxecution, cette condition n'existera plus... (je ne sais pas si je suis très clair la) :/

    Une bibliotheque portable est une bibliotheque comme Boost qui peux etre utiliser sur nimporte quel systeme sans avoir a changer ton code a toi.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    Entendu pour les bibliothèques portables bien que je débute et ne connaîs pas Boost et autres

    Pour ma détection, en fait si je fait

    #ifdef WINDOWS
    maversion = "Win"
    // test pour savoir si XP, 98 ou 95
    #elseif MACINTOSH
    maversion = "Mac"
    #endif

    Est-ce qu'en renvoyant maversion à mon application, le code me retournera maversion ou c'est simplement le compilateur VC++ qui en fonctionnant sous Windows ne traîtera que la partie WINDOWS et réciproquement pour MAC ?

  7. #7
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Citation Envoyé par MABB
    Entendu pour les bibliothèques portables bien que je débute et ne connaîs pas Boost et autres

    Pour ma détection, en fait si je fait

    #ifdef WINDOWS
    maversion = "Win"
    // test pour savoir si XP, 98 ou 95
    #elseif MACINTOSH
    maversion = "Mac"
    #endif

    Est-ce qu'en renvoyant maversion à mon application, le code me retournera maversion ou c'est simplement le compilateur VC++ qui en fonctionnant sous Windows ne traîtera que la partie WINDOWS et réciproquement pour MAC ?
    Le compilateur ne traitera que la partie WINDOWS et réciproquement pour MAC.

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    D'accord alors comment dois-je faire pour détecter les versions ?

  9. #9
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Je ne programme pas sous windows mais y a peut etre moyen de récupérer ca dans la base de registre peut être.

    Jette un oeil dans la MSDN a mon avis il doit bien trainer une fonction qui sert à ca.

  10. #10
    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
    Sous Windows: GetVersion() et GetVersionEx()...
    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.

  11. #11
    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
    Tu pars sur les propositions précédentes (je pense au message de Jean-Marc en particulier) pour savoir qu'elle est la famille de platerforme fille. Et puis pour une plateforme donnée tu regardes la doc et utilise les fonctions non portables qui vont bien.
    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...

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    Salut,

    le code entre windows et mac ne peut pas etre le meme ( a moins que tu parles des nouveaux mac qui marchent sous intel )


    faire la difference entre les 2 system peut se faire de maniere static
    a la compilation pour tes 2 binaires

    avec une commande de ce genre:
    g++ main.cpp -DWINDOWS
    et
    g++ main.cpp -DMAC

    comme les autres personnes t'ont dit tu peux mettre dans ton code ce genre
    de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    string filename;
    #ifdef WINDOWS
     filename="c:\windows\....";
    #endif
    #ifdef MAC
      filename="chemin mac";
    #endif
    si tu veux le faire en dynamique car le binaire windows marche sur ton linux ou ton mac il faut utiliser les fonctions de recuperation de la version windows
    par contre je connais pas les valeurs qui sont retourne par les emulateurs type wine

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est le système de build qui gère donc cela
    T'utilises jam ou quoi ?

  14. #14
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par loufoque
    T'utilises jam ou quoi ?
    GNUmake, pourquoi? Ou plutôt une belle couche au dessus de gmake au boulot, et une couche plus petite et organisée différemment chez moi.

  15. #15
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par MABB
    Bonjour

    Je suis nouveau en C++ et je souhaiterais détecter la version de Windows ou de Mac de mon application hôte (XP, 98, OSx 10 , OSx 9..).

    Un début de code est :
    #ifdef WINDOWS

    #elseif MACINTOSH

    #endif

    Merci pour toutes réponses

    les macros prédéfinies par gcc sous Mac OS X sont

    _ _APPLE_ _
    si définie == vous compilez avec gcc sous Mac OS X

    _ _APPLE_CC_ _
    == la build version de gcc (exemple 5363)

    __GNUC__
    == le major de la version de gcc (exemple 4)

    __VERSION__
    == le texte complet de la version de gcc (exemple "4.0.1 (Apple Computer, Inc. build 5363)" )

    si votre code dépend de l'endianness des données vous aurez aussi besoin des define suivants :

    __BIG_ENDIAN__
    __LITTLE_ENDIAN__

    si vous compilez pour Intel
    __i386__ sera défini
    si vous compilez pour PowerPC
    __ppc__ sera défini


    pour avoir toutes les macros définies avec gcc (sous n'importe quel OS):
    touch foo.h ; cpp -dM foo.h

  16. #16
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Toutes ces infos sont là :
    http://predef.sourceforge.net

  17. #17
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Par défaut
    Merci Laurent pour le lien
    Merci aussi à JeitEmgie pour la piste des macros

    mais en tant que débutant je ne sais pas utiliser les macros

    Je vais essayer de me renseigner

Discussions similaires

  1. [WB17] Détection Système Exploitation Windows ou Mac
    Par tveniere dans le forum WebDev
    Réponses: 1
    Dernier message: 03/03/2015, 10h35
  2. Disque dur MAC sous Windows
    Par black is beautiful dans le forum Composants
    Réponses: 6
    Dernier message: 09/07/2008, 20h06
  3. [OS] Mac et Windows
    Par Pascal26 dans le forum Apple
    Réponses: 1
    Dernier message: 30/10/2007, 15h31
  4. Macs With Windows
    Par ArHacKnIdE dans le forum Apple
    Réponses: 29
    Dernier message: 26/01/2007, 20h30
  5. trouver l'adresse MAC sous Windows 95
    Par seiryujay dans le forum Développement
    Réponses: 4
    Dernier message: 03/05/2004, 13h20

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