2014-12-19 58 views
4

我嘗試在C++項目中使用lua。對於LUA執行我寫這篇文章:lua函數參數預計接近<eof>

#include <lua.hpp> 
... 
luaEngine = luaL_newstate(); 
luaL_openlibs(luaEngine); 

register_results(luaEngine); // For register c++ object in the LUA script as metatable 

lua_pushstring(luaEngine, resultsId.c_str()); 
lua_setglobal(luaEngine, "resultsId"); 

lua_pushboolean(luaEngine, needReloadModel); 
lua_setglobal(luaEngine, "needReload"); 
... 
e = luaL_loadbuffer(luaEngine, script.c_str(), script.size(), NULL); 
if(e != 0) 
    // error message 
e = lua_pcall(luaEngine, 0, 1, 0); 
if(e != 0) 
    // error message 
... 
lua_close(luaEngine); 

而且LUA腳本:

local Res = ResUpdateLUA(resultsId) 
if current_result == "Normal" or current_result=='-' then 
    status = 'E' 
else 
    status = 'O' 
end 
needReload = Res:setShowAnalyte('2320', status) 

那沒有工作,我有錯誤消息:

[string "?"]:7: function arguments expected near <eof> 

但是當我加入

print(needReload) 

在lua腳本結束時它很好用。我究竟做錯了什麼?

+3

你能打印輸出到'luaL_loadbuffer'的'script.c_str()'和'script.size()'的內容嗎?顯示兩個版本,一個使用'print(needReload)',另一個不使用。 – greatwolf 2014-12-19 11:39:27

回答

1

錯誤信息表示Lua在看到Res:s之後到達源的盡頭,但在看到(之前。

我懷疑script.size()是錯的。但我無法解釋爲什麼添加該行可行。

0

謝謝大家的回答。是的,這是script.size()因爲它被替換爲e = luaL_loadbuffer(luaEngine, script.c_str(), strlen(script.c_str()), NULL);開始工作正常時的麻煩。對不起,我的愚蠢問題。

+0

在這種情況下,使用更簡單的'luaL_loadstring',爲你'strlen'。 – lhf 2014-12-19 13:13:32