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

C Discussion :

passage d'une structure quelconque en parametre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de warubi
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 399
    Par défaut passage d'une structure quelconque en parametre
    Bonjour voila mon problème. J'ai une fonction qui réalise une injection dans un processus et une structure est passée en paramètre a ladite fonction pour le thread injecté. Cependant les structures en question sont très différentes (pas le même type, différence du nombre de champs) et je ne sais pas quoi mettre en tant que type d'argument car avec un VOID çà ne marche pas alors que je pensais qu'avec un cast il n'y aurais pas de problèmes. Je pense avoir été un peu flou...

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Vu que la plupart du temps, la création d'un nouveau thread n'accepte pour tout paramètre qu'un pointeur sur void (pointeur générique), le choix est vite fait...

    Le problème ensuite, c'est qu'il faut savoir en quoi caster ledit pointeur dans ta fonction.
    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.

  3. #3
    Membre confirmé Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    Peut être en créant une structure intérmédiaire du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct process_arg 
    {
        int pt_type;
        void *pt;
    }
    Tu passes l'addresse de cette structure en la castant en void *, et ensuite à l'autre bout du tube, selon pt_type, tu sauras vers quelle structure caster.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    On peut aussi y arriver par union (qui est un mot clef qui est assez dur à placer, profitons en):

    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
    enum action_e 
    {
        action_1,
        action_2
    };
     
    typedef void (*fonction_1)(int param1, double param2);
    typedef long (*fonction_2)(char* param1);
     
    typedef struct params_s 
    {
        enum action_e action;
        union 
        {
            fonction_1 f_1;
            fonction_2 f_2;
        } fonction;
    } params;
    à l'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* exemple d'une fonction pour pourrait démarrer un thread */
    void test(params par)
    {
        if(par.action == action_1) 
        {
            par.fonction.f_1(0, .5);
        } 
        else if(par.action == action_2) 
        {
            par.fonction.f_2("hello");
        }
    }

Discussions similaires

  1. Passage d'une structure en paramètre
    Par NeraOne dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/05/2007, 18h16
  2. Passage d'une structure en fonction
    Par god_enel dans le forum C
    Réponses: 11
    Dernier message: 15/04/2007, 20h55
  3. Passage d'une structure dans une fonction
    Par god_enel dans le forum C
    Réponses: 7
    Dernier message: 01/02/2007, 15h33
  4. Passage d'une structure dans une fonction
    Par god_enel dans le forum C
    Réponses: 8
    Dernier message: 22/01/2007, 15h35
  5. [MFC] Passage d'une structure dans une method
    Par KPitN dans le forum MFC
    Réponses: 5
    Dernier message: 18/06/2004, 10h11

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