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 :

Probleme avec la declaration de LRESULT CALLBACK WndProc


Sujet :

MFC

  1. #1
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut Probleme avec la declaration de LRESULT CALLBACK WndProc
    Bonjour,

    Dans un de mes programmes (OpenGL) que j'ai recupere sur le net, il est fait un truc comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Declaration de la fonction WndProc
    LRESULT	CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
     
    BOOL CreateGLWindow(char *title, int width, int height, int bits)
    {
      WNDCLASS wc;
      wc.lpfnWndProc = (WNDPROC) WndProc;
      ...
    }
    Et cela fonctionne.

    Mais je veux mettre tout cela dans une classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BOOL CGLView::CreateGLWindow(char *title, int width, int height, int bits)
    {
      WNDCLASS wc;
      wc.lpfnWndProc = (WNDPROC)  CGLView::WndProc;
      ...
    }
    Et ca il aime pas du tout :

    error C2440: 'type cast' : cannot convert from '' to 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
    None of the functions with this name in scope match the target type
    Comment dois-je declarer ce truc ?????

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    essaie de déclarer la callback en static

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Salut

    Il y a la réponse à ta question dans la FAQ C++ (lorsque le problème de serveur sera réglé ), qui explique notamment la différence (et l'incompatibilité) entre pointeur sur fonction globale/statique et pointeur sur fonction membre.

  4. #4
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut
    Citation Envoyé par nico-pyright(c)
    essaie de déclarer la callback en static
    Cela marche parfaitement, mais le probleme, c'est que si je fais cela je ne peux plus acceder aux membres de ma classe car sinon cela me met :

    illegal reference to data member 'CGLView::active' in a static member function
    Sinon Loulou24, je n'ai pas trouve dans la FAQ C++.... si tu as le lien

  5. #5
    Membre éclairé
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Par défaut
    Une autre solution serait de ne pas mettre dans la classe ma CALLBACK, mais dans ce cas la elle n'aura plus acces aux membres de la classe et ca c'est tres genant

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Sinon Loulou24, je n'ai pas trouve dans la FAQ C++.... si tu as le lien
    Oups elle n'est pas encore sortie . Elle sera incluse à la prochaine version, désolé.

    Le type des fonctions membres et des fonctions globales/statiques n'est pas le même, ce qui explique que ta fonction n'en veuille pas. Pourquoi une différence ? Et bien parce que pour appeler une fonction membre il faut une instance de la classe, tout simplement. Donc tu n'as pas le choix, met la en static. Ensuite comme en général la classe qui gère les évènements de la fenêtre est un singleton, tu peux facilement dans ton callback static déléguer le boulot à une fonction membre.
    J'avais donné le code corespondant à la solution de ce problème, dans un autre sujet, si le délestage n'est pas passé par là tu devrais la retrouver.

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/02/2010, 14h16
  2. [Visual C++]probleme avec les fonctions declarées static
    Par sana06 dans le forum Visual C++
    Réponses: 2
    Dernier message: 20/07/2007, 11h21
  3. Réponses: 8
    Dernier message: 01/06/2007, 00h13
  4. Probleme avec les callback glutess!
    Par jojomillenium dans le forum OpenGL
    Réponses: 4
    Dernier message: 07/11/2006, 19h24
  5. Réponses: 1
    Dernier message: 12/06/2006, 19h02

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