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
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
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...
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.Envoyé par Luc Hermitte
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.
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.Envoyé par MABB
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.
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.Envoyé par MABB
D'accord alors comment dois-je faire pour détecter les versions ?
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.
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.
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...
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 :
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
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
par contre je connais pas les valeurs qui sont retourne par les emulateurs type wine
T'utilises jam ou quoi ?C'est le système de build qui gère donc cela
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.Envoyé par loufoque
Envoyé par MABB
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
Toutes ces infos sont là :
http://predef.sourceforge.net
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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
Partager