J'aurais besoin de l'aide d'un gourou de l'assembleur dans le genre de Denis pour comprendre comment créer une lib avec une fonction surchargée...
Pour faire tres simple, ca pourrait être une fonction dans le genre
min(a, b)
min(a, b, c)
Le code assembleur pour ce genre de fonction est pas trop compliqué... et je suis persuadé d'avoir déjà vu une userlib avec des fonctions surchargée (dans le genre un parametre Flag facultatif)
Dri
Surcharge de fonction (UserLib)
-
- Messages : 1092
- Inscription : mer. 28/janv./2004 16:22
- Localisation : 76
- Contact :
C'est normal, TailBite permet de le faire.Dr Dri a écrit :je suis persuadé d'avoir déjà vu une userlib avec des fonctions surchargée (dans le genre un parametre Flag facultatif)
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
Exact!
Avec TailBite, il te suffit de créer autant de fonctions que tu as de paramètres en plus en leur donnant le même nom, et en ajoutant un index.
Tu peux toujours te baser là-dessus pour examiner le code en assembleur par la suite.
Avec TailBite, il te suffit de créer autant de fonctions que tu as de paramètres en plus en leur donnant le même nom, et en ajoutant un index.
Code : Tout sélectionner
ProcedureDLL MaFonction(Valeur1.l, Valeur2.l)
ProcedureReturn Valeur1 * Valeur2
EndProcedure
ProcedureDLL MaFonction2(Valeur1.l, Valeur2.l, Valeur3.l)
ProcedureReturn (Valeur1 * Valeur2)/Valeur3
EndProcedure
ProcedureDLL MaFonction3(Valeur1.l, Valeur2.l, Valeur3.l, Valeur4.l)
ProcedureReturn (Valeur1 * Valeur2)/Valeur3 + Valeur4
EndProcedure
Bon, je suis pas un gourou , je bricole c'est tout
Pour faire ça en asm, procède comme ceci (je te donne en exemple une de mes commandes
La commande s'appelle
SetItemColor(#Gadget, Ligne.l, Colonne.l, CouleurTexte.l, CouleurFond.l, [Font]) avec 5 paramètres obligatoires et les sixième facultatif.
I faut 2 fichiers asm, un pour la commande à 5 param et un autre pour la commande à 6 param, la commande à 6 param pouvant très bien appeller la commande à 5 et réciproquement.
Le fichier pour la commande à 5 param se nomme comme la commande (c'est plus simple, SetItemColor.asm) et le deuxième fichier se nomme SetItemColor2.asm (c'est plus simple).
Maintenant dans le 1er fichier asm (SetItemColor.asm) il faut y écrire ceci
Public PB_SetItemColor
qui est le nom de la commande avec PB_ devant (obligatoire) , Public pour un appel externe puis là ou commence le code tu mets le label qui porte ce nom
PB_SetItemColor:
Voici le fichier asm de ma commande qui ne fait que d'appeller la deuxième commande
Maintenant le deuxième fichier asm SetItemColor2.asm
Même procédé
Tu déclare la commande Public en mettant un 2 à la fin
Public PB_SetItemColor2
et l'étiquette PB_SetItemColor2: ou le code démarre
Si tu aurais un 3eme paramètre facultatif, tu cré un 3eme fichier asm avec ceci
Public PB_SetItemColor3
PB_SetItemColor3:
Voilà pour les fichier asm et les noms de commande.
Dans le fichier descripteur (.desc) écrit comme ceci (c'est toujours mon exemple) pour 5 ou 6 paramètres
SetItemColor, Long, Long, Long, Long, Long , [Long],
None | StdCall
Comme ce sont des long, je met 5 long sans crochet pour les param obligatoires et le 6eme entre crochets
Voilà, c'est tout.
Ca fera partie je pense d'une explication plus longue dans un tuto sur le façon de créer une librairie PB.
Pour faire ça en asm, procède comme ceci (je te donne en exemple une de mes commandes
La commande s'appelle
SetItemColor(#Gadget, Ligne.l, Colonne.l, CouleurTexte.l, CouleurFond.l, [Font]) avec 5 paramètres obligatoires et les sixième facultatif.
I faut 2 fichiers asm, un pour la commande à 5 param et un autre pour la commande à 6 param, la commande à 6 param pouvant très bien appeller la commande à 5 et réciproquement.
Le fichier pour la commande à 5 param se nomme comme la commande (c'est plus simple, SetItemColor.asm) et le deuxième fichier se nomme SetItemColor2.asm (c'est plus simple).
Maintenant dans le 1er fichier asm (SetItemColor.asm) il faut y écrire ceci
Public PB_SetItemColor
qui est le nom de la commande avec PB_ devant (obligatoire) , Public pour un appel externe puis là ou commence le code tu mets le label qui porte ce nom
PB_SetItemColor:
Voici le fichier asm de ma commande qui ne fait que d'appeller la deuxième commande
Code : Tout sélectionner
format MS COFF
Public PB_SetItemColor
extrn PB_SetItemColor2 ; pour appeler la 2eme commande depuis celle-ci
section '.text' code readable executable
; SetItemColor(Gadget.l, Row.l, Col.l, TextColor.l, BackgroundColor.l)
; esp ---> adresse retour
; esp + 4 --> Gadget
; esp + 8 --> Row
; esp + 12 --> Col
; esp + 16 --> TextColor
; esp + 20 --> BkGroundColor
Gadget equ dword [esp + 24]
Row equ dword [esp + 24]
Col equ dword [esp + 24]
TextColor equ dword [esp + 24]
BkGroundColor equ dword [esp + 24]
PB_SetItemColor:
PUSH dword -1
PUSH BkGroundColor
PUSH TextColor
PUSH Col
PUSH Row
PUSH Gadget
CALL PB_SetItemColor2
RET 20
Même procédé
Tu déclare la commande Public en mettant un 2 à la fin
Public PB_SetItemColor2
et l'étiquette PB_SetItemColor2: ou le code démarre
Si tu aurais un 3eme paramètre facultatif, tu cré un 3eme fichier asm avec ceci
Public PB_SetItemColor3
PB_SetItemColor3:
Voilà pour les fichier asm et les noms de commande.
Dans le fichier descripteur (.desc) écrit comme ceci (c'est toujours mon exemple) pour 5 ou 6 paramètres
SetItemColor, Long, Long, Long, Long, Long , [Long],
None | StdCall
Comme ce sont des long, je met 5 long sans crochet pour les param obligatoires et le 6eme entre crochets
Voilà, c'est tout.
Ca fera partie je pense d'une explication plus longue dans un tuto sur le façon de créer une librairie PB.
Non, pose les questions ici.
Ce qui peut clocher c'est le fichier desc, ne pas oublier de mettre un nom de fichier même bidon pour le fichier d'aide car c'est un champ obligatoire du desc.
Sinon avec mon utilitaire pour faire les libs, tu met les fichiers asm et le desc dans le même dossier et tu compile avec l'utilitaire.
Ce qui peut clocher c'est le fichier desc, ne pas oublier de mettre un nom de fichier même bidon pour le fichier d'aide car c'est un champ obligatoire du desc.
Sinon avec mon utilitaire pour faire les libs, tu met les fichiers asm et le desc dans le même dossier et tu compile avec l'utilitaire.