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 :

Passage de structure en parametres


Sujet :

Visual C++

  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 Passage de structure en parametres
    Voila, j'ai un petit soucis,

    j'ai un projet de type MFC dans lequel j'appelle une fonction appartenant à un lib win32.

    Cette fonction me rempli une structure déclaré comme suit:

    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
    struct  infosTrame
       {
       	char IHMPacketNumber[25];
    	char IHMTime[25];
    	char IHMlenghtUDP[25];
    	char IHMPacketLenght[25];
    	char IHMNameProtocole[25];
    	char IHMIPSrc[25];
    	char IHMPortUdpSource[25];
    	char IHMIPDst[25];
    	char IHMPPortUdpDestination[25];
    	char IHMnomMessage[200];
     
       };
     
    struct infosTrame Trame;
    comment dois je appeler ma fonction pour que celle ci me renvoi cette structure?

  2. #2
    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,
    Réponse bête : il suffit de regarder le prototype de la fonction ...

  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
    C certainement tres bete mais la il y a quelque chose qui me depasse...

    Ma fonction appellée est défini comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void start_capture_offline(struct infosTrame,char* adresseOffLine,char* adresseCAP,char*adresseCsv,char *filtre, int capture_stop);

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 568
    Points
    41 568
    Par défaut
    C'est la fonction à toi ou celle de la lib ?
    Car là, je ne vois rien qui remplisse la structure : La structure est passée par valeur...
    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
    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
    Je reprends car j'ai pas été clair...

    Dans ma lib j'ai une structure déclarée comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct  infosTrame
       {
       	char IHMPacketNumber[SIZE_BUF_PACKET_NUMBER];
    	char IHMTime[25];
    	char IHMlenghtUDP[25];
    	char IHMPacketLenght[25];
    	char IHMNameProtocole[25];
    	char IHMIPSrc[25];
    	char IHMPortUdpSource[25];
    	char IHMIPDst[25];
    	char IHMPPortUdpDestination[25];
    	char IHMnomMessage[200];	
       };
    struct infosTrame Trame;
    Ensuite je l'a rempli dans une fonction comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    strcpy(Trame.IHMPacketNumber,bufPacketNumber);
    strcpy(Trame.IHMTime,bufTime);
    strcpy(Trame.IHMlenghtUDP,lenghtUDP);
    strcpy(Trame.IHMPacketLenght,bufPacketLenght);
    strcpy(Trame.IHMNameProtocole,NameProtocole);
    strcpy(Trame.IHMIPSrc,bufIPSrc);
    strcpy(Trame.IHMPortUdpSource,NumeroPortUdpSource);
    strcpy(Trame.IHMIPDst,bufIPDst);
    strcpy(Trame.IHMPPortUdpDestination,NumeroPortUdpDestination);
    strcpy(Trame.IHMnomMessage,nomMessage);

    J'aimerai appellé cett fonction de mon programme principal MFC pour pouvoir avoir acces a cette structure...

    Et je ne sais pas comment faire.

    Admettons que ma fonction soit void start_capture_offline

    Déja: comment dois-je la definir?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void start_capture_offline(struct infosTrame,char* adresseOffLine,char* adresseCAP,char*adresseCsv,char *filtre, int capture_stop);
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void start_capture_offline(struct Trame,char* adresseOffLine,char* adresseCAP,char*adresseCsv,char *filtre, int capture_stop);

    Ensuite comment je l'appelle?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Capture::start_capture_offline(Trame,adresseOffLine, adresseCAP,adresseCsv,filtre,capture_stop);
    En ayant défini la même structure que ci dessus dans mon projet principal(d'où je fais l'appel)

    Merci de m'ouvrir les yeux!!!

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 568
    Points
    41 568
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void start_capture_offline(struct infosTrame infTrame, char * adresseOffLine, char * adresseCAP, char *adresseCsv, char * filtre, int capture_stop);
     
    // ou mieux:
    void start_capture_offline(struct infosTrame const *pcTrame, char * adresseOffLine, char* adresseCAP,char*adresseCsv,char *filtre, int capture_stop);
    // + Rajouter des const aux char*, là où c'est possible...
    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.

  7. #7
    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 pas tres bien compris...

    Et comment j'appelle cette fonction?

  8. #8
    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
    Personne a une idée qui peut me debloquer?

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 568
    Points
    41 568
    Par défaut
    Si c'est une fonction indépendante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    start_capture_offline(&Trame,adresseOffLine, adresseCAP,adresseCsv,filtre,capture_stop);
    Si c'est une fonction static d'une classe, pareil, mais avec "NomDeLaClasse::" devant...

    Si c'est une fonction membre non-statique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unObjetCapture.start_capture_offline(&Trame,adresseOffLine, adresseCAP,adresseCsv,filtre,capture_stop);
    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.

  10. #10
    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'obtiens une erreur de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error C2664: 'start_capture_offline' : cannot convert parameter 1 from 'struct infosTrame *' to 'struct Capture::infosTrame'

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 568
    Points
    41 568
    Par défaut
    C'est parce que ta fonction est déclarée comme recevant la structure par valeur. Moi, je recommandais plutôt le passage par pointeur const.

    (enfin rétrospectivement, il y a mieux: passage par référence const).


    Mais dis-moi, depuis combien de temps fais-tu du C++ ? Si tu ne connais pas les moyens de passer une structure ou un objet en paramètre d'une fonction, n'est-ce pas un peu tôt pour tenter de programmer avec les MFC ?
    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. Passage de structure en parametre fonction : Pointeur
    Par apicard3 dans le forum Débuter
    Réponses: 5
    Dernier message: 30/10/2013, 08h29
  2. [POO] Calendrier et passage d' objet en parametre
    Par julienr dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/11/2007, 22h18
  3. passage d'un tableau structuré en parametre
    Par babou54 dans le forum Delphi
    Réponses: 11
    Dernier message: 18/05/2007, 12h15
  4. [Activex] Passage de Structure
    Par KPitN dans le forum MFC
    Réponses: 2
    Dernier message: 07/03/2005, 14h05
  5. [Reflection][Method] Passage de int en parametre
    Par seb_fou dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 28/07/2004, 17h47

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