2016-09-28 9 views
0

私は大きな問題があります....それを解決することはできません。 私は無料のパスカル・プログラムとluaスクリプトを持っています。 Luaの実装ルアで文字列instedを取得する方法

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

ではなく、私はCDATAのアドレスを取得する 'NEWSTRING' であり、登録機能を渡すこと

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

。誰でもこの瞬間を理解するのを助けてください。どのようにそれを解決するには?

答えて

0

tostringがアドレスを渡されているため、そのアドレスの文字列表現が得られます。代わりにffi.stringが必要です。

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

strは、パスカルコードによって返されたものを含むLua文字列です。

おそらく大きな問題は、Pascalモジュールのヒープに文字列を割り当てていることです。明らかに割り当てを解除する方法はありません。

+0

*注:私はLuaの何も知らないし、私の答えはドキュメントとこの答えに基づいています:http://stackoverflow.com/questions/25597155/luajit-ff-return-string-from-c-function-to -luaしたがって、構文が不正確になることがあります。私はあなたがルアがそう対応できることを知っていると確信しています。 –

+0

ありがとう、それは動作しません((( –

+0

)何が起こるかについていくつかの詳細はどうですかあなたのパスカルコードの欠陥に完全に合っている可能性があります –

関連する問題