Chaine en retour de CallFunctionFast

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Oncle Karl
Messages : 10
Inscription : mer. 22/juin/2005 6:23

Chaine en retour de CallFunctionFast

Message 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
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message 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...
Denis

Bonne Jounée à tous
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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 
Oncle Karl
Messages : 10
Inscription : mer. 22/juin/2005 6:23

Message 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 ?
Répondre