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 :

[Win32] Application Win32 non valide


Sujet :

Visual C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [Win32] Application Win32 non valide
    Bonjour à tous,

    Je viens vous poser une question peut-être ridicule mais à la quelle je n'ai trouvé aucune solution.

    Alors que je programmé sur Code::Block, j'ai du passé sur Visual Studio 2013 pour des raisons pratiques.

    Lorsque que je compile sous Code::Block (mingw32-gcc.exe) le fichier binaire généré fait environ 1MB et s'exécute sur n'importe quelle version de Windows (XP et Sup) sans aucun problème.
    Cependant lorsque je compile sous Visual Studio, le fichier binaire ne fait plus que 35KB et ne s’exécute plus que sous Windows 8.

    L'erreur est la suivante sous Windows XP: "XY.exe n'est pas une application Win32 valide".

    Sous Windows Vista et Windows 7 il manque des DLL et donc le programme ne fonctionne pas (même en ajoutant les dll manquantes le programme ne peut s'initialiser).

    Je compile sous Windows 8.1 x64 alors je suppose que Visual Studio compile uniquement le Code::Source pour la version de Windows en cours d'utilisation.
    C'est une application Console qui utilise l'API Win32 pour lister les processus en cours.

    Je ne vois pas bien d'où peut venir le problème, comment configurer Visual Studio pour qu'il compile le fichier binaire avec les dll nécessaires au fonctionnement du programme sur Windows XP+ et non juste sur Windows 8 ?

    Merci d'avance,
    GalaxyUser

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Quelle version de Visual Studio 2013 utilises-tu?

    Et quelles valeurs (_WIN32_WINNT, NTDDI_VERSION, etc.) passes-tu quand tu compiles?
    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.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    Je tiens à m'excuser pour le délais de réponse, je n'avais tout simplement pas vu que tu avais répondu.
    C'est la version ultimate de Visual Studio 2013.

    J'ai uniquement un define dans mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _WIN32_WINNT 0x0501
    Un pragma:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma comment(lib,"Psapi.lib")
    Merci encore et à bientôt

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je suppose que tu compiles bien pour une architecture x86? (plate-forme Win32, Desktop, Project Properties -> Linker -> Advanced -> Target Machine = MachineX86 (/MACHINE:X86))...

    Regarde si tu n'as pas moyen d'examiner le header de ton exe dans un éditeur hexadécimal, pour voir les valeurs de machine et de version attendue de Windows...
    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.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Le #define correspond à une plateforme cible WinXp et Win2003.
    C'est bien mais il a le problème de ne définir cette valeur que dans les sources où il est inclus et à partie de ce #define.
    Pour ce genre de réglage, il faut mieux utiliser les constantes de compilation (/D) http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx (section : "Setting WINVER or _WIN32_WINNT").

    Le "#pragma comment(lib,...", c'est pas top pour la maintenabilité, surtout avec un spectre étendu de version de Windows à supporter.
    Préférez utiliser les options du projet, dans les options du linker, pour indiquer la dépendance avec cette librairie.

    Regarde si tu n'as pas moyen d'examiner le header de ton exe dans un éditeur hexadécimal, pour voir les valeurs de machine et de version attendue de Windows... .
    Heu, il y a un peu plus user friendly comme outil, comme DIMPBIN /Headers.
    http://support.microsoft.com/kb/177429/fr

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonsoir à tous,

    Premièrement merci pour vos réponses. Malheureusement rien n'a changé mon fichier fait toujours 35KB et impossible de le lancer sur un Windows plus ancien.

    Je vais essayer sur Visual Studio Express C++ 2012 et voir si le problème est le même.
    Je reviendrai vers vous dans tous les cas pour vous donner une réponse.

    A bientôt,

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    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 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Cela marchera peut-être avec VS2012, mais cela tombera en marche.
    Vous devez ABSOLUMENT maitriser ce que vous faites.

    Appliquez nos recommandations en terme de déclaration de constante de compilation et d'ajout de références aux lib.
    Ce n'est pas une option, c'est le seul moyen FIABLE de générer de manière SURE un exécutable pour une plateforme cible donnée.

    L'utilisation de DUMPBIN, c'est une action qui prend quelques secondes pour avoir une certitude sur la plateforme cible de l'exe. QUELQUES SECONDES!

  8. #8
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Par default Visual Studio (toutes les versions?) compile en MD (Multi-threaded DLL), ce qui implique l'installation sur la machine d’exécution les runtimes re-distribuable de ton complilo, ou compiler en MT (Multi-threaded) est la l'exe est plus gros!
    http://www.microsoft.com/fr-fr/downl....aspx?id=30679
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Mais un problème de runtime manquant ne fait pas une erreur de ce type; ça fait une erreur SxS ou une erreur de DLL manquante.
    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.

Discussions similaires

  1. Application Win32 non valide
    Par NiCLO dans le forum Débuter
    Réponses: 6
    Dernier message: 23/04/2015, 20h27
  2. [WS 2003] explorer.exe application win32 non valide
    Par azorol dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 22/10/2013, 09h06
  3. VS 2012 - application win32 non valide sous XP
    Par kad83 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 25/07/2013, 23h33
  4. update.exe is not a valid WIN32 application !!!!
    Par fm077 dans le forum Windows XP
    Réponses: 1
    Dernier message: 03/11/2005, 15h18

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