5
我正在Delphi中創建一個函數,以便能夠與Lua一起使用它。 我已經設法創建了一個程序(或者沒有結果的函數),它的工作原理是完美的。 問題是,現在我想從德爾福到Lua獲得該功能的結果(不再是一個程序)。 我已經閱讀了一些代碼,但無法使其工作。如何從德爾塔函數調用Lua的結果
我的功能看起來是這樣的:
function TLuaScripter.getsetting(LuaState: TLuaState):TluaState;
var
path,stri: string; i:integer;
begin //getsetting('Targeting/TargetingEnabled')
path := Lua_ToString(LuaState, 1); //we get the string 'Targeting/..."
Lua_Pop(LuaState,1); //we put it in stack (so we can clean it)
stri:= tree.GETsetting(path); //this function gets, for example "No"
lua_pushlstring(LuaState,Pansichar(ansistring(stri)),length(stri)); //I pass it to the lua stack
//showmessage(Lua_ToString(LuaState,1));--> this shows the result I need in a msgbox
result:= LuaState;
end;
所以現在,如果我在的Lua控制檯
getsetting('Targeting/TargetingEnabled')
使用我能夠得到的結果在一個MsgBox(在取消對「Showmessage .. 。「),但該函數在Lua中不返回任何內容!如果我寫
print(getsetting('Targeting/TargetingEnabled'))
我在Lua中得到一個無值。
您應該註冊類型的函數'lua_CFunction'返回結果數量推入堆棧。因此,將返回類型更改爲'Integer'並正確設置返回值'result:= 1;'。順便說一句,用'lua_pop'清理堆棧是可選的。 – 2013-05-12 22:46:02
正確函數聲明的示例:'函數getsetting(L:Plua_State):Integer; cdecl;' – 2013-05-12 22:49:17
我已經完成了以下操作: - 將返回類型從TLuaState更改爲Integer。 - 將結果值更改爲1. - 我也刪除了lua_pop,正如您所說的 它現在正在工作,就像那樣,但它不適用於函數中的「cdecl」。爲什麼需要? 關於「lua_CFunction」,爲什麼我們需要這個,如果我實際上可以打印像「print(getsetting(...))」這樣的值? 感謝您的幫助。 – user2308704 2013-05-13 11:48:34