ça ressemble pas mal à l'exemple de Flype page 1. ça m'arrive aussi de looper les pages!
Par contre, le transfert proc/proc c'est bien urbain de l'avoir précisé.
Cette méthode est, il me semble la plus commune pour les DLLs. Et sûrement la mieux adaptée.
@Kcc : non je n'ai pas de baguette magique!
Quand je serai grand, je commencerai à illustrer mes posts. Tu verras qu'il y a des rudiments qui ne sont pas bien complexes avec un beau dessin à côté. L'Asm sert au quelque peu que Fred a préféré éviter de nous laisser directement à portée de main. Dans ce cas-ci, c'est la pile interne.
Pour persister dans cette technique, voici un code un peu plus 'soft'. C'est un code 'prototype': il ne transfert que les données de type LONG. Si elle semble intéressante, je peux peut-être faire un source méta-macro (un source direct prend pas mal de place et je préfère laisser le choix du nombre max de paramètres) pour traiter tous les types jusqu'à x paramètres (x à préciser dans la méta-macro). Et qui englobe les structures, puisque comme on est fous, on peut duppliquer les champs de structure.
Code : Tout sélectionner
;{ Macros pour retour de LONG }
Macro ProcReturn
! Ret
EndMacro
Macro P1(p, a)
p(a)
! Pop [v_#a#]
EndMacro
Macro P2(p, a, b)
p(a, b)
! Pop [v_#a#]
! Pop [v_#b#]
EndMacro
Macro P3(p, a, b, c)
p(a, b, c)
! Pop [v_#a#]
! Pop [v_#b#]
! Pop [v_#c#]
EndMacro
Macro P4(p, a, b, c, d)
p(a, b, c, d)
! Pop [v_#a#]
! Pop [v_#b#]
! Pop [v_#c#]
! Pop [v_#d#]
EndMacro
Macro P5(p, a, b, c, d, e)
p(a, b, c, d, e)
! Pop [v_#a#]
! Pop [v_#b#]
! Pop [v_#c#]
! Pop [v_#d#]
! Pop [v_#e#]
EndMacro
;}
; *** PRINCIPE ***
Declare UneProcedure(a, b, c, d, e)
; (Pn, c'est un peu comme 'CallFunction')
P5(UneProcedure, a, b, c, d, e) ; 5 est le nombre d'arguments
Debug "Voici 4 départements où siègent aussi un paquet de têtus:"
Debug a
Debug b
Debug c
Debug d
Debug "Et le numéro complémentaire :"
Debug e
Procedure UneProcedure(Finistere, Morbihan, CotesDArmor, IlesEtVilaines, QuaranteQuat)
Finistere = 29
Morbihan = 35
CotesDArmor = 22
IlesEtVilaines = 56
QuaranteQuat = 44
ProcReturn ; << /!\ Attention, ici 'ProcReturn' indispensable et SANS VALEUR DE RETOUR actuellement
EndProcedure