Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 2008
-
16 août 2005 à 14:57
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009
-
19 août 2005 à 16:52
Bien le bonjour,
J`aimerai recuperer des pointeurs vers des fonctions dont je ne connais pas le type a l`avance.
Ex:
DWORD FonctionAlacon(char* pStr)
{
return strlen(pStr) - strlen(pStr); // alors ca pour une fonction a la con, ... !
}
int main(void)
{
void* pointeurFunction;
pointeurFunction = FonctionAlacon;
return 0;
}
Ca ne compile pas car il faut preciser les arguments et parametres. Mais je n`peux pas car je ne connais pas les fonctions a l`avance.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 16 août 2005 à 15:20
Bonjour,
Sans documentation sur cette fonction, il est difficile de trouver son
type de pointeur. Avec beaucoup de chance, tu y arriveras en faisant
des tests avec différents paramètres. Les plantages sont assurés quand
ce ne sont pas les bons. Plus le nombre de paramètres augmente et plus
les chances diminuent. Il faut penser aussi à la convention d'appel.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 16 août 2005 à 16:45
On peut définir un type de pointeur de fonction comme ceci:
typedef BOOL (*PFonction)(int);
On définit ici un pointeur d'une fonction qui renvoie un BOOL et reçoit un int comme paramètre.
Pour déclarer notre pointeur on fait:
PFonction pf;
Pour lui affecter l'adresse d'une fonction on fait:
pf = (PFonction) NotreFonction;
Ainsi, on peut remplacer NotreFonction par pf dans le programme.
Dans cet exemple, la convention d'appel n'est pas précisée. Dans
ce cas le compilateur utilise la convention par défaut : __cdecl. Pour
la préciser dans la définition du type de pointeur on fait par exemple:
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 16 août 2005 à 22:26
Par curiosité, j'aimerais savoir ce que tu veux faire exactement ?! Le "pourquoi du comment".
Avec des possibilités comme le polymorphise paramétrique ou le
polymorphisme d'exécution, je ne vois vraiment pas quelle application
amene à devoir empiler des (void)(void*)(void*).
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 17 août 2005 à 12:42
Bien, ce soir ou demain, je poste un nouveau source qui sera intitulé
"Classe Interpreteur de commande" que tu pourras dériver afin de
réaliser - en partie - ce que tu souhaites faire. J'ai moi même un
besoin similaire et souvent récurrant qui semble tres proche du tien.
Je vais donc le formaliser....