Page 1 sur 1

Chaine en retour de CallFunctionFast

Publié : ven. 24/juin/2005 12:33
par Oncle Karl
J'ai créé une procédure qui retourne une chaine.
J'ai créé un tableau de pointeur de procédure.
J'affecte l'adresse de ma procédure à une case du tableau.
Je veux appeler ma procédure en passant par le tableau, et récupérer la valeur de retour.

Ceci fonctionne avec des procédures qui retourne des nombres mais pas des chaines.
L'aide de CallFunctionFast n'est pas tres explicite.


Un coup de pouce ?

C'est surtout pour savoir comment récupérer une chaine en valeur de retour avec CallFunctionFast !!

Code : Tout sélectionner

Procedure.s test(Val.l)
  Res.s = "AAA"          ;J'ai aussi essayé d'ajouter un Chr(0), mais c'est pas mieux
  ProcedureReturn Res
EndProcedure

Dim PtrProc(2, 2)
PtrProc(0, 0) = @test()

Str.s = ""
Debug test(22)
;Str = CallFunctionFast(PtrProc(0, 0), 22)            ;Ceci genere un erreur de compilation
;Str = Str(CallFunctionFast(PtrProc(0, 0), 22))       ;Ceci est compilable, mais ne genere pas le resultat attendu
;Str = PeekS(CallFunctionFast(PtrProc(0, 0), 22))     ;Ceci genere un plantage de PB
Debug Str

Publié : ven. 24/juin/2005 14:45
par brossden
Bonjour à tous

Je n'y connais pas grand chose mais que je sache une librairie est une fonction extérieure au code de PureBasic ou autre contenu dans une DLL. Donc je ne vois pas pourquoi tu cherches à utiliser CallFunctionFast() qui ne fonctionne que pour les librairies...

Publié : ven. 24/juin/2005 15:45
par nico

Code : Tout sélectionner

Global Res.s 

Procedure.l test(Val.l) 
  Res.s = "AAA"   
  ProcedureReturn @Res 
EndProcedure 

Dim PtrProc(2, 2) 
PtrProc(0, 0) = @test() 

Str.s = PeekS(CallFunctionFast(PtrProc(0, 0), 22))
Debug Str 

Publié : ven. 24/juin/2005 16:57
par Oncle Karl
J'en déduis que CallFunctionFast ne retourne qu'une valeur numérique, que l'on traitera en tant qu'adresse, ou valeur.

Ceci implique qu'il faut faire attention lorsque l'on code des fonctions que l'on souhaite être appelée par un CallFunctionFast.
J'entend par là, que les fonctions ne doivent pas retourner de chaine, mais un pointeur de chaine.

Me trompe-je ?