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

how to get string insted of char pointer in Lua

我有一个大问题....无法解决。 我有免费的 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))

而不是 'newString' 我得到了 cdata 的地址。请任何人帮助我理解这一刻。如何解决?

tostring 被传递给一个地址,所以给你该地址的字符串表示。您需要 ffi.string

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

现在 str 是一个 Lua 字符串,其中包含您的 Pascal 代码返回的内容。

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