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

MFC Discussion :

Var Globale sur MFC Suite 2


Sujet :

MFC

  1. #1
    Membre éclairé Avatar de torNAdE
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 255
    Par défaut Var Globale sur MFC Suite 2
    salut, bon j ai vu que le topic http://www.developpez.net/forums/sho...d.php?t=304715 est marqué comme resolut alors que j ai pas trouvé de reponse concernant la question des variables globales sur MFC.

    lors est ce que qqn pour me dire comment declarer une var globale?
    Merci

  2. #2
    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
    Par défaut
    Bonjour,

    pour qu'une variable soit globale il suffit de la déclarer en dehors de toute classe ou fonction.

    Si elle est définit dans un fichier .cpp il faudra la déclarer avec la mot clé "extern", sinon elle n'est pas visible en dehors de son unité de compilation.

    fichier : main.cpp
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "foo.h"
     
    int g_var_globale = 42;
     
    int main(void)
    {
        PrintVarGlob();
     
         return 0;
    }

    fichier main.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #pragma once
     
    // rend la variable globale visible en dehors de main.cpp
    extern int g_var_globale;

    fichier foo.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <iostream>
    #include "main.h"
     
    void PrintVarGlob(void)
    {
        std::cout << g_var_globale;
    }
    fichier foo.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #pragma once
     
    void PrintVarGlob(void);

  3. #3
    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
    Par défaut
    salut,
    il me semble que d'après le topic de la faq c'est simple non?
    tu déclares tes variables dans ta classe d'application
    tu fais des méthodes d'accès pour ces variables (explications dans le lien cité).
    et tu accèdes a l'unique objet de ton d'application avec la fonction
    AfxGetApp() dont le retour doit être casté avec le nom de ta classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CMyApp *pApp=static_cast<CMyApp *>(AfxGetApp());
    pApp->m_GlobalMyFunction();     //exemple de fonction globale
     pApp->m_Globalvariable=10; // ma variable globale
    je n'ai rien dis de plus que ce qui est dans la faq ou dans le lien cité...

  4. #4
    Membre éclairé Avatar de torNAdE
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    255
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 255
    Par défaut
    Citation Envoyé par farscape Voir le message
    salut,
    il me semble que d'après le topic de la faq c'est simple non?
    tu déclares tes variables dans ta classe d'application
    tu fais des méthodes d'accès pour ces variables (explications dans le lien cité).
    et tu accèdes a l'unique objet de ton d'application avec la fonction
    AfxGetApp() dont le retour doit être casté avec le nom de ta classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CMyApp *pApp=static_cast<CMyApp *>(AfxGetApp());
    pApp->m_GlobalMyFunction();     //exemple de fonction globale
     pApp->m_Globalvariable=10; // ma variable globale
    je n'ai rien dis de plus que ce qui est dans la faq ou dans le lien cité...
    bon si j ai bien compris:
    je declare ma variable globale x dans CParaApp comme suit:
    pour acceder a X à partir d'une autre classe disons CAffiche
    je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     CParaApp *pApp=static_cast< CParaApp *>(AfxGetApp());
     pApp->x=10;
    c bien ca ou y a faute

  5. #5
    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
    Par défaut
    oui c'est ça ..

  6. #6
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    Juste déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern CMyApp theApp;
    depuis VS2003 cette ligne est automatiquement ajoutée dans le header de la classe CMyApp

    CMyApp est toujours un "singleton" en statique. Perso je trouve lourd le AfxGetApp() à caster et je n'y vois aucun interet ... grosse perte de performance surtout si on y accède souvent

    après il y a plus qu'à faire theApp.mafonction() ...

    @+

  7. #7
    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
    Par défaut
    le grosse perte de performance est peu excessif !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    _AFXWIN_INLINE CWinApp* AFXAPI AfxGetApp()
        { return afxCurrentWinApp; }
    c'est sur que dans une boucle il vaut mieux récupérer la valeur avant...
    mais[FONT=monospace]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ]extern CMyApp theApp;
    est certes plus pratique.

  8. #8
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    @farscape: oui effectivement ; j'avais en tete un truc plus compliqué passant par un AfxGetThread() ... c'est clair que ça mange pas de pain non plus de passer par AfxGetApp() (une indirection en plus c'est tout)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/03/2006, 19h28
  2. [Etudes] Infos sur CNAM suite
    Par jcachico dans le forum Etudes
    Réponses: 25
    Dernier message: 26/02/2006, 18h16
  3. [VB.NET] Var globales sur plusieurs projets d'une même solut
    Par boulete dans le forum Windows Forms
    Réponses: 8
    Dernier message: 16/02/2006, 14h04
  4. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59
  5. [DTS] Passer les var globales d'un lot à un autre
    Par David K. dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/07/2003, 12h39

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