Page 1 sur 1
Pointeurs de fonction
Publié : sam. 16/avr./2005 8:36
par Dräc
Le saviez-vous ?
Il est possible de récupérer l’adresse d’une procédure :
Code : Tout sélectionner
Procedure test(a,b)
ProcedureReturn a+b
EndProcedure
*f=@test()
Ici, *f est un pointeur et comme il pointe l’adresse d’une procédure, on pourrait le nommer pointeur de procédure en Pure, mais le terme commun est pointeur de fonction (référence au C)
Du coup, on peut se servir de la commande CallFunctionFast pour executer une procedure en possédant son pointeur :
Code : Tout sélectionner
Procedure test(a,b)
ProcedureReturn a+b
EndProcedure
Procedure test2(a,b)
Debug a+b
EndProcedure
c=10
d=20
*f=@test()
Debug CallCFunctionFast(*f, c, d)
*f=@test2()
CallCFunctionFast(*f, c, d)
Je vous laisse imaginer tout ce qu’il est possible alors de faire. Bref, que du bon

Publié : sam. 16/avr./2005 9:25
par Dr. Dri
bah oué on est plusieurs à le savoir ^^
http://purebasic.hmt-forum.com/viewtopi ... r+fonction
Dri
PS. c'est un sujet entre autres...

Publié : sam. 16/avr./2005 9:53
par Dräc
Je due passer à coté à cause du titre… mais c’est bien cela en effet

Publié : sam. 16/avr./2005 10:20
par cederavic
Et c'est meme très util pour faire des callback pour des userlib par exemple

Publié : sam. 16/avr./2005 10:38
par Oliv
C'est aussi comme àa que l'on utilise les threads

Publié : sam. 16/avr./2005 10:56
par Dräc
A lire ce post, on apprend que ce serait une astuce limitée à Windows.
Pourtant, cela ne me semble pas évident.
Pour moi l’astuce se situe plus au niveau de l’utilisation de CallFunctionFast() comme fonctionnant aussi avec des fonctions autres que simplement issues d’une librairie, que sur la notion de pointeurs de fonction…
Bref, et la remarque d’Oliv vient appuyer ceci, normalement la notion de pointeurs de fonction existe déjà en Pure.
D’où ma question : est-ce que l’astuce CallFunctionFast() fonctionne aussi pour les utilisateurs Linux et AmigaOS ?
Publié : sam. 16/avr./2005 15:58
par Oliv
Dräc a écrit :
A lire ce post, on apprend que ce serait une astuce limitée à Windows.
Pourtant, cela ne me semble pas évident.
Pour moi l’astuce se situe plus au niveau de l’utilisation de CallFunctionFast() comme fonctionnant aussi avec des fonctions autres que simplement issues d’une librairie, que sur la notion de pointeurs de fonction…
Bref, et la remarque d’Oliv vient appuyer ceci, normalement la notion de pointeurs de fonction existe déjà en Pure.
D’où ma question : est-ce que l’astuce CallFunctionFast() fonctionne aussi pour les utilisateurs Linux et AmigaOS ?
Code : Tout sélectionner
CallFunctionFast()
Syntaxe
Resultat = CallFunctionFast(*PointeurFonction [,Parametre1 [, Parametre2...]])
Description
Appelle une fonction en librairie en utilisant son pointeur obtenu par IsFunction() ou par LibraryFunctionAddress(). Cette méthode est plus rapide. Le nombre de paramètres autorisés est quelconque mais doit correspondre exactement aux besoins de la fonction. Par exemple, si une fonction nécessite 2 paramètres, alors 2 paramètres doivent être passés même si les valeurs de ces 2 paramètres sont nulles. 'Resultat' contient le résultat de la fonction appelée.
Note: Pour l'instant le nombre maximum de paramètres est 20.
OS Supportés
Windows, AmigaOS, Linux
Library - Index
La réponse est dans la doc

Publié : sam. 16/avr./2005 18:18
par Dräc
zut!...: Merci Oliv
