PureBasic

Forums PureBasic
Nous sommes le Mar 15/Oct/2019 17:21

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
 Sujet du message: Surcharge de fonction (UserLib)
MessagePosté: Lun 08/Nov/2004 10:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 23/Jan/2004 18:10
Messages: 2527
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Lun 08/Nov/2004 11:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 16:22
Messages: 1092
Localisation: 76
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Lun 08/Nov/2004 12:23 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 24/Jan/2004 14:54
Messages: 3731
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:
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Lun 08/Nov/2004 12:56 
Hors ligne
Avatar de l’utilisateur

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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Lun 08/Nov/2004 16:39 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 23/Jan/2004 18:10
Messages: 2527
Merci beaucoup,
si je ne m'en sort pas, je passerai par tailbit ^^

Dri

PS. vivement un tuto


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Lun 08/Nov/2004 17:01 
Hors ligne
Avatar de l’utilisateur

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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Lun 08/Nov/2004 17:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3518
Localisation: Sourans
Il y a une aide en anglais dans le dossier de pure Library SDK le fichier ReadMe.txt en particulier


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye