我有一个大问题....无法解决它。 我有免费的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的地址。请有人帮我理解这一刻。怎么解决?
答案 0 :(得分:0)
tostring
正在传递一个地址,因此为您提供该地址的字符串表示形式。您需要ffi.string
代替。
local str = ffi.string(ffi.C.getString(5))
现在str
是一个Lua字符串,包含Pascal代码返回的内容。
你的另一个可能更大的问题肯定是你在Pascal模块的堆上分配一个字符串而没有明显的解除分配方法。