如何从Lua调用的Delphi函数中获取结果

我正在创建一个在 Delphi 中使用 Lua 的函数。我已经成功创建了一个过程(或者一个不返回结果的函数),它可以正常工作。问题是,我现在想从 Delphi 中获得该函数(不再是一个过程)的结果,并将其传递给 Lua。我阅读了一些代码,但无法让它们正常工作。

我的函数如下所示:

function TLuaScripter.getsetting(LuaState: TLuaState):TluaState;
var
path,stri: string; i:integer;
begin           //getsetting('Targeting/TargetingEnabled')

 path := Lua_ToString(LuaState, 1); //我们得到字符串“Targeting/...”

 Lua_Pop(LuaState,1); //将其放入堆栈(以便我们可以清除它)

 stri:= tree.GETsetting(path); //此函数获取例如“No”

 lua_pushlstring(LuaState,Pansichar(ansistring(stri)),length(stri)); //我将其传递给 Lua 堆栈

 //showmessage(Lua_ToString(LuaState,1));--> 这将在消息框中显示我需要的结果

 result:= LuaState;
end;

所以现在,如果我在我的 Lua 控制台中使用

getsetting('Targeting/TargetingEnabled')

我可以在消息框中获得结果(取消“显示消息…”),但是该函数不会在 Lua 中返回任何内容!如果我写

print(getsetting('Targeting/TargetingEnabled'))

我将在 Lua 中得到一个空值。

点赞
用户2308704
用户2308704

它将与此完美配合。我们只是添加了结果作为整数和 "result:=1"

function TLuaScripter.getsetting(LuaState: TLuaState): integer;
var
  path,stri: string;
  i: integer;
begin           //getsetting('Targeting/TargetingEnabled')
  path := Lua_ToString(LuaState, 1);
  stri:= tree.GETsetting(path);
  lua_pushlstring(LuaState,Pansichar(ansistring(stri)),length(stri));
  result:= 1;
end;
2013-06-17 01:57:31