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 :wink:

Publié : sam. 16/avr./2005 10:56
par Dräc
Dr. Dri a écrit :bah oué on est plusieurs à le savoir ^^
http://purebasic.hmt-forum.com/viewtopi ... r+fonction
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 :
Dr. Dri a écrit :bah oué on est plusieurs à le savoir ^^
http://purebasic.hmt-forum.com/viewtopi ... r+fonction
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 :wink:

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