如何在 Lua 中获取字符串而不是字符指针

我有一个大问题...无法解决它。 我有一个 Free Pascal 程序和 Lua 脚本。

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

通过传递注册函数,可以在 Lua 中实现

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

但是,我得到的是 cdata 的地址,而不是 'newString'。请帮助我理解这一点。该如何解决?

点赞
用户505088
用户505088

tostring函数被传递了一个地址,所以会将该地址的字符串表示返回。你需要使用ffi.string代替。

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

现在,str是一个包含Pascal代码返回值的Lua字符串。

你的另一个可能更大的问题是,你在Pascal模块的堆上分配了一个字符串,但没有明显的方法来释放它。

2016-09-28 07:28:29