Fred a écrit :Je ne vois pas trop ce que tu veux faire, peux tu poster un petit exemple ?
Ma question au départ était que j'aurais aimé que PB appelle une fonction et que ma fonction soit en fait une macro asm avec les paramètres sans retour puis je me suis dit ça pourrait être utilisé pour n'importe quel code mais en essayant de faire ça sur papier, je me rend compte que ça n'apporte pas grand chose (on se rapproche du code de l'API).
On a ceci lorsque l'on appelle une commande de ce type là en StCall pour une fonction qui s'appelle fonction et qui a 3 paramètres de type long
fonction(Param1, Param2, Param3)
PB empile Param3, Puis Param2 puis param1 puis le pointeur d'instruction est empilé (adresse de retour) par le call PB_fonction
Ensuite dans la routine, il y a de grandes chance que l'on empile une nouvelle fois les paramètres à partir de leurs emplacements respectifs pour l'appel d'une API ou msg ou d'une commande PB ou utilisateur
Je pensais que PB pourrait empiller les paramètres définis dans le desc puis inclure le code directement sans appel de fonction, ce qui ressemble à une macro commande.
Voilà un petit exemple de ce que je voudrais faire
Voici une code asm d'une de mes libs perso d'une commande qui retourne #true si la statusbar est au format UNICODE ou 0 si elle est au format ANSI (passage de 1er param par eax)
Code : Tout sélectionner
section '.text' code readable executable
PB_IsStatusBarUnicode:
; IsStatusBarUnicode(StatusBarID)
SUB edx,edx
PUSH edx
PUSH edx
PUSH dword SB_GETUNICODEFORMAT
PUSH StatusBarID
CALL _SendMessageA@16
_Retour:
RET
ça correspond au message PB
PB va appeller cette commande comme ça
Moi je voudrais ça
le message a besoin de 4 param dont dans ce cas là 2 paramètres à 0
On pourrait indiquer dans le desc que la fonction a 4 paramètres dont deux à 0 et qu'il est inutile de l'indiquer dans la commande écrite en PB, de même une autre valeur du message est connue à l'avance, il s'agit de la valeur #SB_GETUNICODEFORMAT donc la commande pourrait s'appeller en PB :
PB empilerait donc en fonction du desc tous les paramètres dont 3 pourraient dans ce cas là être définis dans le descripteur, ensuite pas de call d'une fonction mais le code direct (je ne sais pas si c'est possible)
Code : Tout sélectionner
IsStatusBarUnicode, Long, Long = #SB_GETUNICODEFORMAT, Long =0, Long = 0, (StatusBarID) - Get If StatusBar text is ANSI or UNICODE
Long
PB empile tous les paramètres dans le bon ordre avec les bonnes valeurs.
le code de la fonction (= macro) se charge de remettre le pointeur de pile à la bonne valeur (dans ce cas c'est un appel à msg MS)
Ca permettrait dans certains cas d'optimiser le code (oui je sais on peut mettre le msg directement mais tout le monde ne connait pas forcément les API MS et c'est un cas avec des API mais ça peut être une commande PB ou utilisateur.
Reste à trouver par quoi remplacer le Call dans le code asm généré par PB pour que on ne puisse pas pomper tout le code asm des commandes
C'est peut-être une usine à gaz
C'est clair ?
Bon si c'est pas possible, je m'en remettrais
