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 :

convertir un pointeur de fct C++ en C


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 15
    Points
    15
    Par défaut convertir un pointeur de fct C++ en C
    Bonjour !

    Une petit question bien simple pour vous mes amis,
    j'ai un fonction dans un un .C qui recoit comme paramètre l'adresse d'une fct.
    Sela marche tres bien quand j'envoie l'adress dune fonction qui est dans un .C , yer !
    Malhreusement, lorsque j veu envoyer l'adress dune fct qui est dans un .cpp jai un erreur : error: invalid conversion from 'void*' to 'void (*)()'

    je croit que je doit convertir mon pointeur de fct cpp en pointeur de fonction c , mais comment caster une tell chose

    voici le code

    main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    void CompteurMs(void) 
    {
     //...
    }
     
    //.....
    int main(void)
    {
    AT91F_AIC_ConfigureIt ( (void *)CompteurMs); 
    //compile en .c mais pas en .cpp
    }
    lib.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    unsigned int AT91F_AIC_ConfigureIt (void (*newHandler) () ) 
    {
    // arg address of the interrupt handler
    }

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    - Attention, .C = (pour certains) .cpp. Utilise .c pour les fichiers sources C.

    - En C++ on ne peut pas convertir un void (*)() en void * : ce sont deux types "trop différents". En C on peut car void *, en C, est compatible avec tous les types pointeurs.

    - Si tu veux utiliser une fonction C++ dans du code C ou l'inverse, tu dois (dans le code C++) déclarer cette fonction avec extern "C".

    - Pour ton info, en C, void (*)() est un pointeur de fonction qui retourne void (en s'en fout des arguments, la fonction doit juste retourner void). Une fonction qui retourne void et qui ne prend aucun argument se déclare void (*)(void). En C++ void (*)() et void (*)(void) sont la même chose (si ce n'est que 4 caractères en plus dans le deuxième cas). Dans tous les cas, caster une fonction c'est généralement mauvais. Il faut passer le bon type de fonction un point c'est tout.

    Voilà, j'espère que ça t'a aidé .

  3. #3
    Invité
    Invité(e)
    Par défaut
    Le type de paramètre attendu par AT91F_AIC_ConfigureIt étant justement le type de CompteurMs, pourquoi avoir mis un cast qui provoque une erreur ? Cela devrait compiler si tu l'enlèves...

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/12/2010, 18h19
  2. Comment convertir un pointeur en Double?
    Par Art19 dans le forum Langage
    Réponses: 13
    Dernier message: 20/07/2007, 11h05
  3. convertir un bstr en pointeur de char
    Par dam123 dans le forum C
    Réponses: 2
    Dernier message: 20/02/2007, 20h52
  4. [C#] Convertir pointeur C++ en C#
    Par farfadet dans le forum C++/CLI
    Réponses: 7
    Dernier message: 10/10/2006, 12h48
  5. [debutant]Convertir un pointeur byte en String
    Par patmaba dans le forum SL & STL
    Réponses: 3
    Dernier message: 22/07/2005, 13h34

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