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]
Partager