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 :

Problème d'include avec une section critique.


Sujet :

Visual C++

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 48
    Points
    48
    Par défaut Problème d'include avec une section critique.
    Bonjour, je suis en train de programmer une application et j'ai besoin d'une section critique pour gerer mes threads.

    lorsque j'inclut

    #include "afxmt.h"


    j'obtient le message d'erreur suivant :

    #error WINDOWS.H already included. MFC apps must not #include <windows.h>

    savez vous ce que je peux faire pour eviter ce problème?

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Points : 785
    Points
    785
    Par défaut
    Peut-être en pas inclure windows.h comme l'indique le message

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 48
    Points
    48
    Par défaut oui
    oui j'avais compris le message mais j'utilise windows.h dans d'autres fichiers et je ne peux pas faire autrement.
    Pas de windows.h avec les MFC??? C'est vrai ça???

  4. #4
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Et copier Windows.h dans ton répertoire courant, puis inclure:
    ça donne quoi?

  5. #5
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Débuter et finir tous tes .h de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef NOM_DU_FICHIER_H
    #define NOM_DU_FICHIER_H
     
    ...
    /* ta déclaration */
    ...
     
    #endif  /* NOM_DU_FICHIER_H */

  6. #6
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 48
    Points
    48
    Par défaut c fait
    Oui c fait ça les ifndef

  7. #7
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    si tu peux éditer ton windows. h, mets en un dedans

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ca n'a rien à voir avec les ifndef, même s'il faut naturellement les mettre. Si une application utilise les MFC, il ne faut pas inclure quelque part windows.h.

  9. #9
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    ... le compilo lui indique pourtant que windows.h est deja inclut, pourquoi un ifndef dans windows.h ne réglerait il pas la question ?

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 581
    Points
    41 581
    Par défaut
    De toutes façons, il me semble Windows.h est inclus (sans doute d'une façon assez précise et à un moment particulier) par les headers de MFC, non?

  11. #11
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il te faut inclure à la place le afx... correspondant

    c'est courant comme message avec winsock2, c'est le cas ?

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Médinoc
    De toutes façons, il me semble Windows.h est inclus (sans doute d'une façon assez précise et à un moment particulier) par les headers de MFC, non?
    Voilà, c'est pour ça qu'il indique qu'il ne faut pas l'ajouter - on est au moins sûr de l'ordre -

  13. #13
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 48
    Points
    48
    Par défaut afx correspondant??
    Il me faut inclure le afx correspondant?? Il y a un afx correpondant à windows.h?? C'est ça? Je pige pas trop. Où puisje trouver cela? Personne semble s'accord dans ce post.

  14. #14
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    alors avec les MFC pas de windows.h
    surtout pas de copie de windows.h comme j'ai lu etc...
    il te faut rajouter dans stdafx.h : #include <afxmt.h>


  15. #15
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 48
    Points
    48
    Par défaut
    J'ai essayé, ça revien au même. Toujours le même problème. Il faut pas avoir définie windows.h! Pourtant, windows.h est défini par la MFC après qu'elle ai testé qu'il était pas défini.
    En gros il faut que ce soit elle qui le déclare en premier.
    C'est la merde, je vais bosser avec celle ligne qui provoque l'erreur en commentaire, on verra bien si un problème survient par la suite...
    Merci pour votre aide

  16. #16
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    montre le contenu de stdafx.h.

  17. #17
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 48
    Points
    48
    Par défaut stdafx
    voila le contenu. J'ai testé plusieurs variantes mais ça passe pas. C étrange qu'ils interdisent le windows.h quand même pour les mfc.

    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
    #pragma once
     
    #ifndef WINVER				// Autorise l'utilisation des fonctionnalités spécifiques à Windows XP ou version ultérieure.
    #define WINVER 0x0501		// Attribuez la valeur appropriée à cet élément pour cibler d'autres versions de Windows.
    #endif
     
    //#include <stdio.h>
    #include <tchar.h>
     
    #include <afx.h>
    #include <afxwin.h>         // composants MFC principaux et standard
    #include <afxext.h>         // extensions MFC
    #include <afxmt.h>
     
    #include <iostream>

  18. #18
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 48
    Points
    48
    Par défaut
    et ça plante là dès que je met cette ligne

    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
    #ifndef C_CriticalSection_H_
    #define C_CriticalSection_H_
     
    #include "stdafx.h"
    #include "I_CriticalSection.h"
    //#include "afxmt.h"
     
    //Contient des méthodes virtuelles 
    class C_CriticalSection : public I_CriticalSection
    {
    public:
    	C_CriticalSection(void);
    	~C_CriticalSection(void);
     
    private:
    	//ça plante ici
    	CCriticalSection _objProtectionDSImage;
     
    public:
    //non encore implémenté
    	//mise en attente du thread
    	virtual void Wait(int millisecondes) ;	
     
    	//Lancement du thread
    	virtual void Pulse() ;
     
    	//Protection de la section de code
    	virtual void Lock() ;
     
    	//Annulation de la protection
    	virtual void Unlock() ;
    };
     
    #endif //C_CriticalSection_H_

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 581
    Points
    41 581
    Par défaut
    1. Les <afx> etc. doivent être inclus en premier.
    2. afxmt.h est déjà inclus dans stdafx.h.

    Et donc, si tu ne mets rien du tout, la classe CCriticalSection est inconnue, c'est ça ?

  20. #20
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 48
    Points
    48
    Par défaut
    en fait g un autre problème maintenant.

    j'ai rédui stdafx à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <afxmt.h>
    #include <tchar.h>
    #include <iostream>
    et j'ai enlevé win_32 dans le préprocesseur et ça semble avoir débloqué certain trucs.

    maintenant g une erreur du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    impossible d'accéder à private membre déclaré(e) dans la classe 'CObject'
    et ça m'envoit sur le fichier afxmt.h

Discussions similaires

  1. Réponses: 16
    Dernier message: 07/07/2009, 13h46
  2. Problème de focus avec une TTreeView
    Par Rustine dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/10/2005, 18h12
  3. Problème de requête avec une condition IN
    Par sorcer1 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/10/2005, 11h56
  4. problème de connexion avec une base firebird
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/05/2005, 11h40
  5. Problèmes d'accent avec une connexion ODBC et ADO
    Par michael.jacques dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2005, 15h36

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