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 des fonctions midi de Windows

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
19
20
21
22
23
24
25
26
27
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 loin 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�e 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.


[Balises CODE rajout�es par Loulou24, merci d'y penser � l'avenir]