Fulgy
Messages postés85Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention 5 octobre 2004
-
13 sept. 2004 à 15:56
Fulgy
Messages postés85Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention 5 octobre 2004
-
13 sept. 2004 à 17:46
Rebonjour! J'ai posté tout à l'heure une question sur les pointeurs sur fonction en VB6 à laquelle je me suis moi même répondu pensant avoir trouvé la réponse sur l'aide de VB, mais je suis rebloqué :'( (et cette fois-ci j'ai bien chercher avant de vous soumettre ma question). Voilà où j'en suis:
J'ai trouvé la méthode pour récupérer l'adresse d'une fonction/procédure qui est représenté par un Long, grâce à l'utilisation de AddressOf et maintenant je cherche à me servir de cette adresse pour appeller ma fonction mais c'est là que je bloque! Petit extrait de l'aide VB:
L'opérateur AddressOf permet de passer l'adresse de la procédure à une fonction API de Windows dans une DLL, et non la valeur renvoyée par la procédure. La fonction API peut alors utiliser l'adresse pour appeller la procédure Basic. Ce processus est connu sous le nom de "rappel".(...)S'il est vrai que vous pouvez utiliser l'opérateur AddressOf pour passer des pointeurs de procédures aux procédures Basic, vous ne pouvez appeler une fonction avec un pointeur de ce type en Basic.
Moi ce que j'en ai compris c'est que on peut récupérer des "pointeurs sur fonctions" mais qu'ils sont inutilisables sauf par l'intermédiaire d'une API!! Moi qui ai commencé par le C, ça me trou le c..! Si c'est aussi mal fait, il doit bien exister une API qui permette de passer un "pointeur sur fonction" en argument plus les arguments de cette fonction pointée pour pouvoir l'exécuter??? Rassurez-moi s'il vous plaît!!
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 13 sept. 2004 à 17:12
lol excelent ;)
( 1 ) Pour la declaration de l'API la voici :
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal Pointeur As Long, ByVal P1 As Long, ByVal P2 As Long, ByVal P3 As Long, ByVal P4 As Long) As Long
Pointeur = AddressOf TaFonction
P1 P2 P3 P4 sont les paramettres de TaFonction
( 2 ) Il faut adapter le code de ta fonction car comme tu peux le voir plus haut pour utiliser CallWindowProc il faut empiler 4 paramettres ni plus ni moins
donc ta fonction "DOIT" ressembler a ceci
Function/Sub MaFonction(ByVal P1 As Long,Byval P2 As Long,ByVal P3 As Long, ByVal P4 As Long) (As Long)
( 3 ) Les *.obj sont des "morceaux de code" que lon peut lier avec le projet vb. Cette technique est pas tres pratique mais voici qlqs essaies dans ce domaine :
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 13 sept. 2004 à 16:42
Exact ! inutilisable dans la syntaxe VB dite "classique".
le plus simple c'est CallWindowsProc a condition d'adapter
le code de la procedure pour accepter 5 paramettres de type long
(sinon autre possibilité avec *.Obj ou code ASM)
Fulgy
Messages postés85Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention 5 octobre 2004 13 sept. 2004 à 16:53
Eh mais t'étais censé me rassurer E.B. !! :)
Tu sais où je pourrais trouver des infos sur cette fonction parce-que je l'ai pas sous l'aide de VB? Qu'est-ce que tu entends par adapté le code de la procédure? C'est quoi les *.obj? Quand est-ce qu'on mange? ... Ok! -->[ ]
Merci :)
Fulgy
Messages postés85Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention 5 octobre 2004 13 sept. 2004 à 17:46
Merci E.B. pour toutes ces infos, finalement je crois que je vais garder les pointeurs sur fonction pour le C uniquement :) ça va pas convenir pour l'utilisation que je voulais en faire, tant pis je vais me débrouiller autrement. Au fait ta ligne:
Pointeur = AddressOf TaFonction n'est pas correcte, faut faire une p'tite fonction (Wrapper) débile pour récupérer un "pointeur sur fonction" (je l'est mise sur le post Pointeur sur fonction). Encore merci et a+.