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 :

Portée de variable dans différents projets


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut Portée de variable dans différents projets
    Voila j'ai sous un meme workspace différents projets...

    j'ai une fonction sous un projet définie comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void displayMessage (char *i_Trame, char *nameMsg)
    {
    std::string strName;
    ....
     
    strName=msg->_name;
    size_t size = strName.size() + 1;
    nameMsg = new char[ size ];
    strncpy( nameMsg, strName.c_str(), size );
    }
    A l'execution de cette fonction j'ai bien la chaine souhaitée dans nameMsg

    J'appelle cette fonction d'un autre projet comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *nomMessage;
    nomDeMonNamespace::displayMessage(trame,nomMessage);
    J'aimerai récupérer la chaine nameMsg dans ce projet pour pouvoir la réutiliser...

    Cependant apres quelques essais, je n'obtiens rien...
    On dirai que ma variable que j'ai pourtant passé en parametre, ne veut pas sortir du premier projet...

    Je ss preneur de toutes remarques et éventuels déblocages....


  2. #2
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    J'aimerai récupérer la chaine nameMsg dans ce projet pour pouvoir la réutiliser...
    Alors il faut changer le prototype de ta fonction displayMessage.

    Si tu veux que nomMessage pointe sur nameMsg, il faut passer son adresse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void displayMessage (char *i_Trame, char **nameMsg)
    {
       std::string strName;
       strName=msg->_name;
    
       size_t size = strName.size() + 1;
       *nameMsg = new char[ size ];
       strncpy( *nameMsg, strName.c_str(), size );
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *nomMessage;
    nomDeMonNamespace::displayMessage(trame, &nomMessage);
    Sans oublier le delete [] nomMessage;
    L'itération est humaine; la récursion, divine.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    J'ai réussi à récuperer ma chaine de caracetere nameMsg comme ceci:

    Appel de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *nomMessage= new char[200];   //// Variable permettant de récupérer le nom du message
    nomDeMonNamespace::displayMessage(trame,nomMessage);
    Ma fonction appelée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void displayMessage (char *i_Trame, char *nameMsg)
    {
    std::string nameMsg2;
    ....
     
    nameMsg2=msg->_name;
    size_t size = nameMsg2.size() + 1;
    char *temp = new char[ 200 ];
    strncpy( temp, nameMsg2.c_str(), 200 );
    strcpy(nameMsg,temp);
    }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 213
    Points : 58
    Points
    58
    Par défaut
    Par contre je rencontre un nouveau probleme, j'aimerai que ma fonction me retourne un tableau dynamique de chaine...

    Ma fonction est la suivante

    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
    char ** displayMessage (char *i_Trame, char *nameMsg, int *lenghtMsg, char *tableauChamps)
    {
    char **tableauchaines;
     
    for (i=0;i<NbChamps;i++)
    {
    tableauchaines[i]=champs;  //// Remplissage du tableau de champs
    //// En mode debug, j'ai l'impression de constater que le remplissage se fait comme voulu...
    }
    .....
     
    for(i=0; i<NbChamps; i++)
    {
    /// Ici je souhaite tester si le tableau est effectivement bien rempli, mais la je m'apercois que seule le derniere chaine est presente
    printf("%s", tableauchaines[i]);
    }
     
    tableauchaines[NbChamps] = NULL;  //// Permet de marquer la fin du tableau
    return tableauchaines
    ;
    }

    Je ne sais pas vraiment comment faire....

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut
    Je ne suis pas sûr de vraiment comprendre ce developpement pas projets.
    Même si des projets sont dans le même workspace, ils n'echangent pas forcement de données entre eux.
    Sauf si par exemple le premier genère une librairie et le second utilise celle-ci.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut
    Trop de problèmes dans ce code.
    A mon avis, un passage vers la FAQ C serait très utile.
    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
     
    char ** displayMessage (char *i_Trame, char *nameMsg, int *lenghtMsg, char *tableauChamps)
    {
     
    //-- C'est très mauvais de retourner un pointeur..
    char **tableauchaines;  
     
    //-- utilisation d'un tableau sans initialisation (allocation dynamique)
    for (i=0;i<NbChamps;i++)
    {
    tableauchaines[i]=champs; //--? affectation de pointeurs à pointeurs ou copie de chaines de caractères ?
    }
    .....
     
    for(i=0; i<NbChamps; i++)
    {
    printf("%s", tableauchaines[i]); //? Normal, tableauchaines mal rempli.
    }
     
    tableauchaines[NbChamps] = NULL;  //--? inutile. il vaut mieux connaitre les dimensions de ton tableau.
    return tableauchaines;  //? OK mais effectuer un delete après.

Discussions similaires

  1. Portée de variable dans un include
    Par geve2007 dans le forum Langage
    Réponses: 2
    Dernier message: 17/03/2009, 14h45
  2. Utilisation d'une même variable dans différents fonctions de Callback
    Par houjuventini dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 16/11/2007, 08h58
  3. [XSLT] Portée de variables dans un switch
    Par Xunil dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/08/2007, 13h29
  4. :: Portée de variables dans une boucle ::
    Par lemilig dans le forum Flash
    Réponses: 5
    Dernier message: 12/06/2007, 15h20
  5. Porté de variable dans un try except
    Par japey dans le forum Général Python
    Réponses: 4
    Dernier message: 23/05/2007, 12h55

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