Salut.
Voici un code non-fonctionnel

, si ça peut faire avancer le chmilblick.
J'ai testé en faisant une vrai DLL et pas en faisant une lib mais je crois que dans les 2 cas c'est tailbit qui est utilisé.
Code DLL
Code : Tout sélectionner
;Global a,b,c,d$ ; global a la librairie
Structure sBidon
a.i
b.i
c.i
d$
EndStructure
;/
Global VarStructure.sBidon
;*******************toto.Lib (Tailbite)*******************
Procedure xxx(parametre.i)
;trucmuche
; MessageRequester(d$, "Valeur : "+ str(a))
; MessageRequester(d$, "Valeur : "+ str(b))
; MessageRequester(d$, "Valeur : "+ str(c))
MessageRequester(VarStructure\d$, "Valeur : "+ str(VarStructure\a))
MessageRequester(VarStructure\d$, "Valeur : "+ str(VarStructure\b))
MessageRequester(VarStructure\d$, "Valeur : "+ str(VarStructure\c))
EndProcedure
ProcedureDLL toto(a.i,b.i,c.i,d$)
;ProcedureDLL.i toto(a.i,b.i,c.i,d$)
;ProcedureDLL toto(*sBidon.VarStructure)
VarStructure\a = a
VarStructure\b = b
VarStructure\c = c
VarStructure\d$ = d$
;xxx(parametre.i) ; Fonctionne renvoi les MessageRequester
CreateThread(@xxx(), *Valeur) ; Fonctionne que si l'on met un callDebugger :(
;ProcedureReturn Thread
EndProcedure
;******************************************
Code uilisant cette DLL
Code : Tout sélectionner
EnableExplicit
Prototype toto(a.i, b.i, c.i, d$)
If OpenLibrary(0, "DLLDobro.dll")
Global TestDobro.toto
TestDobro.toto = GetFunction(0, "toto")
TestDobro(1,2,3,"coucou")
CallDebugger ; Pas besoin de ça si on utilise simplement la fct : xxx(parametre.i) dans la DLL.
CloseLibrary(0)
Else
Debug "DLL non trouvée..."
End
EndIf
Alors chose étonnante, si dans la DLL, dans la procédure "toto" on active xxx(parametre.i) et que l'on désactive CreateThread(@xxx(), *Valeur)
Alors dans le programme pas besoin de CallDebugger, cela affiche bien les MessageRequester avec les bonnes valeurs.
Par contre si dans la DLL, dans la procédure "toto" on active CreateThread(@xxx(), *Valeur) et que l'on désactive xxx(parametre.i)
Alors dans le programme on a besoin de CallDebugger, pour que cela affiche les MessageRequester et ses bonnes valeurs.
Apparemment un Thread dans une DLL ça n'aime pas beaucoup.
Mais c'est peut-être un début de piste.
Dommage que Gnozal ne soit pas dans le coin, il avait l'air de connaître ce genre de chose.
Tu peux peut-être le MP (<- Ça n'est pas cochon).
Au passage Dobro, suite à ce que tu avais dit dans la doc à revoir pour CallFunction, je viens de m'apercevoir que dans la doc english de la 4.50 il y avait écrit ceci :
Return value
Result - The result of the function that has been called.
Note: This function is not very flexible and does not handle string/float/double/quad parameters or string/float/double/quad returns. The use of: prototypes is now strongly recommended.
Bye.