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

Autres éditeurs Discussion :

Problème de compilation avec Microsoft Platform SDK


Sujet :

Autres éditeurs

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Problème de compilation avec Microsoft Platform SDK
    Bonjour,
    J'ai pour projet de développer une démo 3D sous Windows uniquement. J'ai donc opté pour le compilateur gratuit de Microsoft CL, fourni avec Microsoft VC++ Tookit 2003. J'ai également installé Microsoft Platform SDK afin de disposer de la gestion des fenêtres.
    Or, quand je compile le code que j'ai trouvé sur ce site (1er chapitre du didacticiel API windows il me semble), le compilateur me renvoie une erreur: il ne trouve pas le fichier "excpt.h", inclus dans la fichier "windows.h". J'ai effectivement inclus "windows.h", fichier qu'il trouve, mais il me semble qu'il s'agisse d'un souci dans le fichier "windows.h" lui-même... ou peut-être dois-je configurer mes variables d'environnements...

    Pour être clair, j'nclus "windows.h", qui inclus "execpt.h", fichier qui n'existe pas, en tout cas dans le répertoire de windows.h (il se trouve dans le répertoire "crt/" )

    Y a-t-il une solution à mon problème, qui ne relève pas (au possible) de la bidouille ?

    Merci d'avance

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut encore une petite précision
    j'oubliais...
    Quand je compile un exemple fourni avec Microsoft Platform SDK avec nmake (qui donc fonctionne a priori), ça ne fonctionne pas, il y a toujours des erreurs de fichiers manquants ou autres...

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    excpt.h est un fichier fourni avec le toolkit. Le repertoire /include du toolkit ne doit pas être dans l'include path. Execute vcvars32.bat du toolkit avant de compmiler, ou ouvre une console à partir du racourci prête à l'emploi "Visual C++ Toolkit 2003 Command Prompt" dans le répertoire d'install du toolkit.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci. La mise à jour des variables d'environnements m'ont permis de régler le problème de "excpt.h". Cependant, un nouveau problème survient.
    En effet, j'ai copié dans le fichier "test.cpp" le code récupéré dans le tutorial API Windows en C. Pour rappel, il s'agit du code suivant:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #include <windows.h>
     
     
    LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
     
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
                                                    LPSTR lpCmdLine, int nCmdShow)
    {
        HWND hwnd;
        MSG msg;
        WNDCLASS wc;
     
        wc.style = 0;
        wc.lpfnWndProc = MainWndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = NULL;
        wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
        wc.lpszMenuName =  NULL;
        wc.lpszClassName = "MaWinClass";
     
        if(!RegisterClass(&wc)) return FALSE;
     
        hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW,
                                       CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
                                                       NULL, NULL, hinstance, NULL);
        if (!hwnd) return FALSE;
     
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
     
     
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    /******************************************************************************/
     
    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
            case WM_CREATE:
     
                return 0;
     
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
     
            default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    }
    Pour complier ce code, j'utilise la commande suivante:
    A la compilation, il me renvoit les erreurs suivantes, que je ne m'expliquent pas:
    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
    test.cpp
    Microsoft (R) Incremental Linker Version 7.10.3077
    Copyright (C) Microsoft Corporation.  All rights reserved.
     
    /out:test.exe 
    test.obj 
    test.obj : error LNK2019: unresolved external symbol __imp__DispatchMessageA@4 referenced in function _WinMain@16
    test.obj : error LNK2019: unresolved external symbol __imp__TranslateMessage@4 referenced in function _WinMain@16
    test.obj : error LNK2019: unresolved external symbol __imp__GetMessageA@16 referenced in function _WinMain@16
    test.obj : error LNK2019: unresolved external symbol __imp__UpdateWindow@4 referenced in function _WinMain@16
    test.obj : error LNK2019: unresolved external symbol __imp__ShowWindow@8 referenced in function _WinMain@16
    test.obj : error LNK2019: unresolved external symbol __imp__CreateWindowExA@48 referenced in function _WinMain@16
    test.obj : error LNK2019: unresolved external symbol __imp__RegisterClassA@4 referenced in function _WinMain@16
    test.obj : error LNK2019: unresolved external symbol __imp__LoadCursorA@8 referenced in function _WinMain@16
    test.obj : error LNK2019: unresolved external symbol __imp__LoadIconA@8 referenced in function _WinMain@16
    test.obj : error LNK2019: unresolved external symbol __imp__DefWindowProcA@16 referenced in function "long __stdcall MainWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWndProc@@YGJPAUHWND__@@IIJ@Z)
    test.obj : error LNK2019: unresolved external symbol __imp__PostQuitMessage@4 referenced in function "long __stdcall MainWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?MainWndProc@@YGJPAUHWND__@@IIJ@Z)
    test.exe : fatal error LNK1120: 11 unresolved externals
    Cependant, le fichier "test.obj" a bien été créé. Manque le principal, l'exécutable...

  5. #5
    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,

    C'est un problème d'édition de lien, tu dois "linker" contre User32.lib (entre autre) pour obtenir ton exécutable.

    D'une manière générale, on peut considérer que les bibliothèques suivantes sont recquises :

    kernel32.lib user32.lib gdi32.lib comdlg32.lib shell32.lib

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Je ne suis pas à l'aise au niveau de la compilation. J'utilise d'ordinaire Dev-CPP, qui génère le Makefile tout seul, ce qui facilite cette opération.
    Quelles seraient donc les différentes étapes de la compilation, ou quelles sont les options à ajouter à la ligne de commande "cl test.cpp" pour que tout se passe bien ?

  7. #7
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Neitsa t'a répindu, il faut juste donner en argument les libs qu'il faut (libs Windows).
    Je crois que CodeBlocks supporte VC++ toolkit, tu peux l'essayer...
    http://loulou.developpez.com/tutoriels/cpp/codeblocks/

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Alors j'ai testé CodeBlocks. Il semble effectivement complet. Mais quelque chose me chiffonne.

    Je n'ai installé que Microsoft Visual C++ Tookit 2003, et Microsoft Platform SDK. Ces deux outils devraient suffir au développpement sous Windows, non ? Avec ces derniers, je dispose d'un compilateur (cl.exe), d'un éditeurs de liens (link.exe), fournies par VC++ Toolkit, mais aussi d'un compilateur des ressources (rc.exe) et de nmake, fournies par Platform SDK.

    CodeBlocks préremplis les chemins des différents exécutables de compilateurs, éditeurs de liens, etc ... très bien, mais pourquoi choisit-il forcément le make de GNU (que je n'ai pas), le rc pour la compilation des ressources (que j'ai effectivement, mais avec Platform SDK, non avec VC++ Toolkit, ce qu'il se borne à déclarer comme tel ?

    De plus, j'ai toujours défendu Microsoft Windows pour la simplicité de son utilisation. Il est vrai qu'installer un logiciel sous Windows se fait avec une incroyable facilité et un certain confort... alors pourquoi ai-je tant de problèmes pour installer correctement ces deux outils afin de développer en toute sérénité sur cette platforme. Après les différentes installations, il faut partir dans les variables d'environnements pour ajouter différents chemins pour accéder correctement aux ressources, ajouter tout de même l'adresse des librairies dans mes lignes de commandes pour que les liens se fassent correctement,... Ce me semble assez compliqué, surtout quand il s'agit de faire fonctionner un SDK et un Toolkit provenant de la même boîte, et non des moindres. En choisissant Linux, je pourrais m'attendre à de tels procédures, mais sous Windows,... ça m'étonne.

    Sous Dev-CPP, à l'installation, j'ai directement accès à l'API windows avec windows.h, sans me soucier de "bidouiller" dans les variables d'environnements, la configuration,... pour que ça fonctionne.

    Ne voyez dans mes propos que des questions sincères, et non des critiques sur les produits Microsoft, car j'ai vraiment envie de passer à VC++ Toolkit afin de profiter au mieux des possibilités de Windows et des optimisations du Toolkit. Je ne souhaite pas baisser les bras, mais le temps vient à me manquer et je vais être forcer de repartir sous Dev-CPP.

    Pour bien faire, si quelqu'un pouvait me dire comment il a installé/configuré le ToolKit et le SDK, ainsi que ces variables d'environnements, de manière à pouvoir compiler sans problèmes. Si la compilation avec cl est particulière, il serait bien d'en avoir un exemple avec le code de base de création d'application (le post que j'ai édité précédemment), histoire de bien comprendre mes erreurs.

    Merci

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Je vais déplacer vers "Outils pour C & C++".
    Windows est plus simple à utiliser parce que des gens sont payés pour cela, et toi aussi (normalement ) tu payes pour cela. Visual C++ s'installe et configure tout comme devcpp, mais lui aussi est payant.
    MS a décidé de fournir gratuitement le compilo. Il faut passer par la ligne de commande, et c'est plus contraignant. Mais tu as un post-it dans le forum VC++:
    http://www.developpez.net/forums/viewtopic.php?t=188492
    et la FAQ:
    http://c.developpez.com/faq/vc/?page...ginToolkit2003
    Code Blocks je ne l'ai jamais utilisé. Mais le principe d'un IDE c'est de générer de manière transparente la ligne de commande à envoyer au compilo. Faute d'IDE, c'est à toi à étudier tous les arguments du compilateur et de contruire la ligne qui va bien.

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Bonne nouvelle:
    http://msdn.microsoft.com/vstudio/express/visualc/download/

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Bonne nouvelle:
    http://msdn.microsoft.com/vstudio/express/visualc/download/
    Et bonne nouvelle pour ceux qui étaient , ils ont eu droit aux versions standard sur CD

    Citation Envoyé par VenusX117
    De plus, j'ai toujours défendu Microsoft Windows pour la simplicité de son utilisation.
    D'autres systèmes sont simples d'utilisation. Certains paraîssent compliqués quand on est déjà habitués à Windows, mais c'est seulement parce qu'on a des habitudes. Un exemple : mes parents (qui ne sont pas informaticiens ni grands utilisateurs d'informatique) utilisent un PC sous...Linux. Et sans vouloir les vexer : si eux y arrivent c'est que c'est simple.

    Citation Envoyé par VenusX117
    Il est vrai qu'installer un logiciel sous Windows se fait avec une incroyable facilité et un certain confort...
    Comme sous d'autres systèmes aussi... En une commande ou en 4 clics, on peut télécharger+installer+configurer une application sous Linux.

    Citation Envoyé par VenusX117
    alors pourquoi ai-je tant de problèmes pour installer correctement ces deux outils afin de développer en toute sérénité sur cette platforme. Après les différentes installations, il faut partir dans les variables d'environnements pour ajouter différents chemins pour accéder correctement aux ressources, ajouter tout de même l'adresse des librairies dans mes lignes de commandes pour que les liens se fassent correctement,... Ce me semble assez compliqué, surtout quand il s'agit de faire fonctionner un SDK et un Toolkit provenant de la même boîte, et non des moindres.
    Comme dit précédemment, si vous voulez les outils MS qui font tout tout seuls sous Windows, il faut les acheter. Sinon, il vous faudra un petit effort.
    Cet effort s'explique en partie par le fait que sous Windows vous pouvez choisir d'installer les outils en question sur votre disque C: ou sur votre disque D: ou... Ce choix implique qu'il y aura des choses à faire pour que tel programme puisse trouver tel ou tel fichier (il ne peut pas le deviner). C'est en général plus simple sous Linux car les emplacements de tels ou tels types de fichiers (entêtes, librairies) ou programmes (de base, pour administrateur, pour utilisateurs) sont standardisés : ils sont (presque) toujours au même endroit.
    Certaines choses sont, certes, plus simples sous Windows, mais il faut comparer ce qui est comparable. Juste un exemple : sur combien d'architectures tourne Windows ? Comparez la liste avec celle des architectures supportées par la distribution debian (et je ne parle pas des distributions dédiées aux systèmes embarqués, etc) : Alpha, ARM, HP PA-RISC, Intel x86, Intel IA-64, Motorola 680x0, MIPS, MIPS (DEC), PowerPC, IBM S/390, SPARC.

    Citation Envoyé par VenusX117
    En choisissant Linux, je pourrais m'attendre à de tels procédures, mais sous Windows,... ça m'étonne.
    Bah non, raté. Sous une debian, si je tape "apt-get install anjuta", j'ai un environnement de développement C/C++ qui est téléchargé/installé/configuré. Pour les procédures compliquées vous repasserez...

    De toutes façons et de manière générale :
    - dès que vous n'utiliserez pas un environnement de développement "tout intégré", il vous faura configurer quelque-chose ;
    - dès que vous aurez des besoins spécifiques il vous faudra configurer quelque-chose (Windows ou pas Windows).
    Le développement n'est pas l'activité de "Monsieur ToutLeMonde" et les outils associés n'auront pas toujours la simplicité des programmes pour "Monsieur ToutLeMonde". Il faudra s'y faire.

    Citation Envoyé par VenusX117
    Pour bien faire, si quelqu'un pouvait me dire comment il a installé/configuré le ToolKit et le SDK, ainsi que ces variables d'environnements, de manière à pouvoir compiler sans problèmes.
    Concernant les variables d'environnement, c'est normalement fait automatiquement. Un ".bat" ("vcvars32.bat" si ma mémoire est bonne) est créé lors de l'installation et il suffit de le lancer pour que toutes les variables nécessaires à la compilation soient définies.
    Concernant le SDK, je n'ai rien fait de spécial.
    Concernant le toolkit, il semblerait que Code::Blocks le supporte. c'est en tous cas ce qu'a écit loulou. Si c'est faux, il faudra penser à le gronder... Tu veux un tutoriel sur le sujet ? Il y en a un .

    Bon courage !
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  12. #12
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Merci d'éviter un troll Windows vs Linux. Cela dit, j'ai quand même envie de préciser que Linux ça veut pas dire grand chose, il faut parler de distrib (debian, ...).
    Quant aux plateformes supportées, si on compte celles historiquement supportées et celles supportées par WinCE, on arrive tout de même à une liste généralement surprenante: Intel x86 (16 et 32 bits), Compaq Alpha, Motorola Power PC, MIPS, ARM, Hitachi SuperH, AMD64 (x86-64) / Intel EM64T, IA-64 (Itanium).

Discussions similaires

  1. Problème de compilation avec Borland : Direct Draw
    Par Burckel dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 26/09/2005, 18h17
  2. Problème de compilation avec Direct Input
    Par di-giac dans le forum DirectX
    Réponses: 6
    Dernier message: 06/05/2005, 18h19
  3. [MFC] Problème de compilation avec afxctl.h
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 15/06/2004, 13h51
  4. Problème de compilation avec Dev-C++
    Par Rouliann dans le forum Dev-C++
    Réponses: 14
    Dernier message: 14/06/2004, 18h44
  5. Réponses: 1
    Dernier message: 29/10/2003, 12h16

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