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

Visual C++ Discussion :

Constantes de compilation WINVER


Sujet :

Visual C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Points : 52
    Points
    52
    Par défaut Constantes de compilation WINVER
    Bonjour

    J'essaie de compiler un programme (avec Visual Studio 2015 sous Windows 10) pour qu'il fonctionne sous Windows XP SP3 ou +.
    Comme proposé dans un topic précédent, j'ai déclaré les constantes suivantes en tête de mes fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define WINVER		0x0501
    #define _WIN32_WINNT	0x0501
    #define NTDDI_VERSION	0x05010300
    L'exécutable généré fonctionne bien sous Windows 10, mais il ne fonctionne pas sous Windows XP Pro SP3 (version 5.1.2600). Au lancement du programme, le message suivant apparait : "C:\...\text.exe n'est pas une application Win32 valide".

    Qu'est-ce que j'ai raté dans la manip ?
    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Il vaut mieux mettre ces constantes de compilation dans les propriétés du projet plutôt que des #define.

    Et, au message d'erreur, je pense que vous compilez en 64bits et que l'OS Windows XP Pro SP3 est en version 32 bits.

    Êtes-vous sûr de compiler en 32bits ?

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Points : 52
    Points
    52
    Par défaut
    Merci Bacelar.
    Je n'ai pas encore la solution à mon problème, mais votre réponse m'a sans doute permis d'identifier la cause.

    Je suis allé dans les propriétés du projet, et dans la partie "Général", il est indiqué que la plateforme cible est Windows 8.1. Le problème maintenant est que je ne peux pas modifier cette valeur : la plateforme cible a la valeur "Windows" et est grisée (=> non modifiable), et la seule valeur possible de la version est 8.1.
    J'ai pourtant installé Visual Studio en prenant soin de cocher les options de portabilité Windows XP, Vista, etc...
    Comment donc se fait-il que la seule version de plateforme cible possible soit "8.1" ?

    Bien cordialement

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Points : 52
    Points
    52
    Par défaut
    J'ai peut-être trouvé ...

    Dans les propriétés du projet, dans la partie "Général", il faut d'abord mettre le champ "Ensemble d'outils de plateforme" à la valeur "Visual Studio 2015 - Windows XP (v140_xp)".
    Cela déverrouille les champs relatifs à la plateforme cible.

    Avec ça, j'ai réussi à générer l'exécutable.
    J'essayerai demain de le lancer sur un PC Windows XP.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Points : 52
    Points
    52
    Par défaut
    Ca y est : j'ai essayé, et ça marche.
    J'ai mis le champ "Ensemble d'outils de plateforme" à la valeur que j'ai indiquée, et j'ai effacé complètement les champs "Plateforme cible" et "Version de la plateforme cible".

    Merci encore !

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Vérifiez quand même quand utilisant une API non disponible sous WinXP il vous envoie bien dans les roses.

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

Discussions similaires

  1. Changement des constantes post-compilation
    Par DakM dans le forum C++
    Réponses: 5
    Dernier message: 02/05/2013, 09h47
  2. Réponses: 2
    Dernier message: 21/05/2010, 11h56
  3. Ajouter une "constante de Compilation"
    Par yoyolepsy dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 09/04/2010, 19h03
  4. [VB.NET 2005] Constante de compilation
    Par Bz dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/02/2008, 10h38
  5. compiler avec constante dans un autre fichier
    Par hysah dans le forum C++
    Réponses: 8
    Dernier message: 28/03/2006, 22h57

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