Page 1 sur 1

Récupérer une valeur Double retournée par une DLL

Publié : lun. 12/févr./2018 18:31
par falsam
C'est une question qui a été supprimé de cette section mais qui mérite au moins une réponse. :wink:

■ Code de création de la DLL (MaDll.dll)

Code : Tout sélectionner

ProcedureDLL.d test()
  net.d = 2.10
  ProcedureReturn net
EndProcedure
La création de la DLL s'accompagne de la lib associée

■ Code de récupération de la valeur retournée par la fonction test()

Code : Tout sélectionner

Import "MaDll.lib"
  test.d() ;<- Noter le d comme ....
EndImport

Debug StrD(test(), 2)

Re: Récupérer une valeur Double retournée par une DLL

Publié : lun. 12/févr./2018 23:44
par Ollivier
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

Code : Tout sélectionner

Define.Double *x
*x = MyProc()
Debug StrD(*x\D)
De cette manière, on est plutôt tenté d' "injecter" un pointeur :

Code : Tout sélectionner

ProcedureDLL.I MyProc(*x.Double)
   *x\D = 37.5
EndProcedure

Code : Tout sélectionner

Define.Double x
MyProc(x)
Debug StrD(x\D)
(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 ?

Re: Récupérer une valeur Double retournée par une DLL

Publié : mar. 13/févr./2018 16:08
par Fig
J'ai eu ma réponse dans le; forum anglais donc j'ai viré ma question ici...
Je crois que je me confronte plusieurs fois à la même interrogation tant j'utilise peu des Dll en Pb.

C'est une Dll pour faire des réseaux de neurones artificielles.
Je posterai ça pour les curieux.