begin process at 2012 05 29 15:06:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Passer un pointeur sur une instance à une fonction membre static ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Passer un pointeur sur une instance à une fonction membre static ?

lundi 28 novembre 2005 à 11:28:59 | Passer un pointeur sur une instance à une fonction membre static ?

tintin72

Bonjour,

j'ai un problème pour passer un pointeur sur une instance ou l'adresse de l'instance à une fonction callback Windows.

Je m'explique
J'ai créé une classe Midi qui utilise les fonctions midi de Windows

class Midi
{
  HMIDIIN  hMidiIn ;           //Handle d'entrée MIDI
  MIDIHDR midiHdr;          //Variable de type structure MIDIHDR

  //D'autres variables membres
  //.......
 public:

  static void CALLBACK MidiIn_cb (HMIDIIN hMidiIn, UINT uMsg, DWORD  
                               dwInstance,  DWORD dwParam1, DWORD dwParam2);          
  void StartMidiIn(void *pInst);
};


void Midi::StartMidiIn(void *pInst)
{
     if (midiInOpen(&hMidiIn, 0, (DWORD)MidiIn_cb, 0, CALLBACK_FUNCTION))

    //Suite du code
   //......
}
//plus tard dans le code
Midi record;
record.StartMidiIn(&record);


le flag CALLBACK_FUNCTION dans midiInOpen, dit à Windows d'appeler la fonction callback qui est passée en 3eme paramètre (MidiIn_cb dans mon cas).
On peut donner le nom qu'on veut à la fonction callback, par contre elle doit avoir des paramètres précis.

La fonction callback attend les paramètres suivants:
1: le handle d'entrée Midi
2: la nature du message Midi
3: une valeur de notre choix (passé par midiInOpen)
4 et 5: les différentes valeurs du message Midi récupéré par Windows.

Cette fonction étant static elle ne reçoit donc pas de pointeur this.
Aussi, je n'arrive pas à voir comment je pourrais lui passer un pointeur sur l'instance
ou l'adresse de l'instance qui l'a invoquée.
J'ai bien sur pensé au 4eme paramètre de midiInOpen (un DWORD de notre choix)
qui est passé à la fonction callback (DWORD dwInstance) à chaque fois que celle-ci est appelée.
Mais comment caster un pointeur sur instance (void*) en DWORD ?

Si quelqu'un pouvait m'aider.

D'avance merci.

Tintin 72

lundi 28 novembre 2005 à 11:53:04 | Re : Passer un pointeur sur une instance à une fonction membre static ?

ymca2003

Réponse acceptée !
(DWORD)this
ou
(DWORD_PTR)this
ou
(ULONG_PTR)this

selon les cas (les 2 dernières permettent une compatibilité 64 bits)

this est le pointeur à passer en paramètre aux callback


Cette discussion est classée dans : fonction, instance, pointeur, callback, dword


Répondre à ce message

Sujets en rapport avec ce message

Pointeur sur fonction ? [ par tintin72 ] Bonjour, J'ai un petit souci avec les pointeurs sur fonction. Voilà, j'ai une fonction qui prend comme argument un pointeur sur fonction: void maFonct Probleme de timer avec fonction de callback [ par julienbj ] Bonjour,j'ai un petit souci lors de la création d'un timer avec une fonction de callback.Voici un bout de code qui ne fonctionne pas, mais je ne vois Utilisation de fonctions Callback [ par N0euX ] Bonjour a tous,</o: transfere de pointeur [ par stefbuet ] salut, j'ai créé un pointeur dans une fonction, comment je peux faire pour pouvoir le réutiliser dans une autre fonction, ou mieux l'utiliser partous Instance [ par victorcoasne ] Bonjour,J'ai un programme avec une dll. Sous dev-c++ en compilant la dll comme du C++ la fonction DllMain n'est pas appellée. Je l'appelle donc avec Faire une callback vers un exe dans un callback hook d'une dll [ par Suisse00 ] Salut :) J'ai créer un hook sur le clavier dans une DLL, dans le callback du hook j'aimerais faire un callback vers une fonctoin du fichier exe. J'ar [C] Probleme de passage d'un pointeur de tableau [ par tenev911 ] Bonjour, voici mon probleme :J'utilise la librairie ncurses.h et il permet de faire un type de variable appellé WINDOW (qui correspond graphiquement à Problème avec la fonction callback du timer [ par Arkadias ] Bonjour tout le monde, je suis confronté à un problème de timer.Voila la situation :Dans le cadre d'un projet de conversion de protocole, je récupère problème de pointeur [ par Kurpeus1 ] Bonjour. J'ai déjà posé la question il y a deux trois jours mais je n'ai pas eu de réponse satisfaisante. Je me permet de réxpliquer mon problèmej'ai Comment traiter l'erreur d'un pointeur foireux ? [ par Booster ] Bonsoir à tous,Alors voilà j'ai une fonction comme suit :bool Fonction (void * ptr, int tailleptr){    char message[2000];     memcpy(message , ptr ,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales