Surcharge de fonction (UserLib)

Pour discuter de l'assembleur
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Surcharge de fonction (UserLib)

Message par Dr. Dri »

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
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

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)
C'est normal, TailBite permet de le faire.
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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

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.

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
Tu peux toujours te baser là-dessus pour examiner le code en assembleur par la suite.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Bon, je suis pas un gourou :cry: , 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

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
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.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Merci beaucoup,
si je ne m'en sort pas, je passerai par tailbit ^^

Dri

PS. vivement un tuto
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Il y a une aide en anglais dans le dossier de pure Library SDK le fichier ReadMe.txt en particulier
Répondre