2016-09-28 2 views
0

J'ai un gros problème .... ne peut pas le résoudre. J'ai un programme pascal gratuit et un script lua.comment obtenir la chaîne insted du pointeur char dans Lua

function getString(i:integer):PChar;public; stdcall; 
begin 
//something to do 
Result:=strnew(PChar('newString')); 
end 

en passant les fonctions d'enregistrement il y a Lua mise en œuvre

ffi.cdef 
[[ 
char*__stdcall getString(i:integer); 
]] 
local str =ffi.C.getString(5) 
print (tostring(str)) 

au lieu de 'nouvelleChaine Je me adresse de CDATA. S'il vous plaît, aidez-moi à comprendre ce moment. Comment le résoudre?

Répondre

0

tostring est passé une adresse, et ainsi vous donne la représentation sous forme de chaîne de cette adresse. Vous avez besoin de ffi.string à la place.

local str = ffi.string(ffi.C.getString(5)) 

Maintenant str est une chaîne contenant Lua ce qui a été retourné par votre code Pascal.

Votre autre problème peut-être plus important est sûrement que vous allouer une chaîne sur le tas du module Pascal sans aucun moyen évident de le désallouer.

+0

* Note *: Je ne sais rien de Lua et basé ma réponse sur sa documentation et cette réponse: http://stackoverflow.com/questions/25597155/luajit-ffi-return-string-from-c-function-to -lua Il peut donc y avoir des inexactitudes de syntaxe. Je suis sûr que vous savez que Lua sera en mesure de faire face. –

+0

Merci, mais ça ne marche pas ((( –

+0

) Que diriez-vous d'un détail sur ce qui se passe, pourrait parfaitement être un défaut dans votre code Pascal –