Fonction En Paramètre [Résolu]

Signaler
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
-
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
-
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

Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
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é ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
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
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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;<
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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;
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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;<
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
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é ?