Bonjour Falsam,
j'ai vu "DLL" dans le titre, et là je vois Import: EndImport donc je risque de répondre à côté de la plaque.
Pour les DLLs, "Prototype" permet de retrouver un Double.
Pour les LIBs, j'avoue ne pas utiliser ce type de fichier...
Pour les DLLs, comme pour les LIBs, si un entier est retournable (et donc récupérable), tu peux suivre une technique que j'ai apprise avec Gnozal (c'est par les pointeurs) :
Code : Tout sélectionner
ProcedureDLL.I MyProc()
Define.Double x
x\D = 37.5
ProcedureReturn x
EndProcedure
De cette manière, on est plutôt tenté d' "injecter" un pointeur :
(J'ajouterai que le rôle de "Prototype", s'apparente à ça : utiliser les pointeurs en interne et permettre une syntaxe "normale" des variables. )
Et d'une tentation à l'autre, les structures semblent alors faciliter la tâche.
Code : Tout sélectionner
Structure MyStruc
a.Double
EndStructure
ProcedureDLL.I MyProc(*x.MyStruc)
*x\A = 37.5
EndProcedure
Code : Tout sélectionner
Structure MyStruc
a.Double
EndStructure
Define.MyStruc x
MyProc(x)
Debug StrD(x\A)
Ainsi seul un entier sert de clé (par adressage), ce qui convient notamment aux threads qui n'acceptent que ça.
Aussi, dans la pratique, cela occulte les doutes sur le support des types exotiques (chaînes, flottants, etc...) car cela élude la problématique à la seule taille d'adressage : est-ce en 32 bits ou bien en 64 bits ?