Pointeur sur fonction ?

cs_tintin72 Messages postés 122 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 22 juillet 2006 - 10 janv. 2006 à 18:42
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 10 janv. 2006 à 21:14
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 maFonction(int (*ptFn)(int))


dans cette fonction j'appel une fonction Windows (timeSetEvent) qui à son tour
appel une fonction callback. Ce que je voudrais, c'est récupérer mon pointeur sur fonction
dans la fonction callback. Je le passe donc en 4éme argument de timeSetEvent:


timeSetEvent(arg1, arg2, (LPTIMECALLBACK)fn_cb, (DWORD_PT)ptFn, arg5);


le problème c'est que quand j'essaie de le récupérer dans la fonction callback


void CALLBACK fn_cb(UINT id, UINT msg, DWORD instance, DWORD param1, DWORD param2)
{
int *ptFn = (int*)instance;


et que je veux ensuite appeler la fonction


ptFn(25);


le compilo me dit: called object is not a function


est ce que quelqu'un pourrait me dire comment faire ?

Merci

Tintin 72

2 réponses

Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
10 janv. 2006 à 19:14
Bonsoir,

Commence par définir ton pointeur en un type de pointeurs de fonctions.
Pour cela, il faut écrire :

typedef int (*MYFUNC)(int);

et ensuite tu déclares une variable globale de type MYFUNC :

MYFUNC pfn;

Et comme ça, plus besoin de t'embêter à la passer aux fonctions en argument; c'est directement accessible
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 janv. 2006 à 21:14
Salut,
int (*ptFn)(int) = instance;

et tu utilises ptFn(...).

C'est vrai que de definir un type sur ton pointeur de fonction est plus
pratique, mais le coup de la variable globale c'est bof...
0
Rejoignez-nous