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
A voir également:
Passer un pointeur sur une instance à une fonction membre static ?