Fonction En Paramètre

Résolu
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 29 août 2005 à 10:15
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 29 août 2005 à 12:04
Hep Hello les gens :)



J'ai une question qui me tarrode l'esprit voyez vous

Exemple explicite



LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); //Prototype



DialogBox( ..., ..., ..., (DLGPROC)WndProc);



Comment qu'elle fait la fonction DialogBox pour ne pas spécifier les paramètres ?

Fin bref, si vous aurez un exemple simple et explicite pour m'aider à comprendre ces machins lol :)

Merci bien

if(!Meilleur("Joky")) return ERREUR;

7 réponses

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
29 août 2005 à 10:41
moi je peux de donner un exemple d'utilisation de pointeur sur fonction :
pour implementer mes routines d'arbres; l'appelant doit passer en paremetre un pointeur sur une fonction de comparaison (comme cela le code est générique).
Voici comment on declare la fonction, et comment on l'appelle avec des paramtres :

// definition du type pointeur sur fonction de comparaison
typedef int (*CMP_FUNC)(void *key1,void *key2,void *param);
// exemple de fonction de comparaison d'entier
int cmpInt(void *key1,void *key2,void *param)
{
int a,b;


UNUSED_PARAMETER(param);


a = (int)key1;
b = (int)key2;


if(a > b) return CMP_MORE;
else if(a < b) return CMP_LESS;
else return CMP_EQUAL;
} // cmpInt()

// defintion d'un arbre AVEC la fonction de comparaison
typedef struct tagTREE
{
int nElem; // nombre d'elements
CMP_FUNC cmpFunc; // fonction de comparaison
void *param; // parametre pour la fonction de comparaison
P_NODE_TREE root; // racine de l'arbre
}TREE,*P_TREE,**PP_TREE;

// exemple d'appel de la fonction pour la recherche d'un element
r = tree->cmpFunc(key,cur->key,tree->param);
// ce sont les routines d'arbres qui passe les parametres a la fonction
// la puissance des pointeur sur fonction, c'est qu'avec elle on peut faire enormemant de chose, juste en changeant la fonction passée, cela est tres utile pour le code générique.

Pourquoi faire simple quand on peut faire compliqué ?
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 août 2005 à 10:54
DialogBoxParam demande l'adresse d'une fonction, tu lui donnes donc tout est ok, je ne comprends pas ton problème Joky.

En plus, si tu as besoin du cast (DLGPROC) c'est que ta dialogProc est mal prototypée.

ciao...
BruNews, MVP VC++
3
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
29 août 2005 à 10:55
salut,

DialogBox prend en parametre un pointeur vers la fonction callback, apres elle appelle cette fonction comme elle veut.

C'est DialogBox qui choisit les parametres avec lesquels elle va
appeler la fonction callback, qui choisit notamment quand elle va
appeler cette fonction (elle va le faire plusieurs fois d'ailleurs...),
et pas celui qui appelle la fonction DialogBox.

c'est confus dans ta tete
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
29 août 2005 à 10:17
J'viens de lire et ça veut rien dire lol

Donc je reprend

J'ai compris que ça devait certainement être dû au pointeur de
fonction, mais j'comprend pas comment on fait pour ne pas spécifier les
paramètres de la fonction WndProc :^)

if(!Meilleur("Joky")) return ERREUR;<
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
29 août 2005 à 10:48
Ouai okay mais tu utilises les paramètres quand même :)

Tandis que la fonction DialogBox n'utilise pas les paramètres de la fonction WndProc

Peut être qu'il sont obsolètes parce qu'une WNDPROC est toujours du même type je sais pas mais c'est bizarre lol

if(!Meilleur("Joky")) return ERREUR;
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
29 août 2005 à 11:30
Pfiuuu ouai quand même C'est très confu

J'vais reprendre des vacances moi lol :)

Merci quand même :p



Et au passage j'vois pas l'intérer d'utiliser des pointeurs de fonction plutot que les fonctions elle même

if(!Meilleur("Joky")) return ERREUR;<
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
29 août 2005 à 12:04
La reponse est simple : la fonction est un parametre, on ne la connait pas dans la routine, si tu te poses cette question, poses toi celle la aussi (elle est plus generale) : A quoi servent les arguments ?

Pourquoi faire simple quand on peut faire compliqué ?
0
Rejoignez-nous