2013-10-23 78 views
2

最近我試圖在我的C應用程序中嵌入LUA,現在我想要做的是我有一個值(Session_ID),我想從C函數傳遞給LUA腳本,以便LUA腳本可以使用它在C中調用一個函數。如何將全局值從C傳遞給LUA?

我沒有問題在C中加載LUA腳本並運行它(使用lua_pcall),並且我沒有問題以及從LUA內部調用C函數,我當前的問題是傳遞全局變量來回。

例如:

在C側(test.c的):

session_id = 1; 
luabc_sz = rlen; 
result = lua_load(L, luaByteCodeReader, file, "script", "bt");  
if(lua_pcall(L, 0, 0, 0) != 0) 

在哪裏的文件是包含LUA腳本(script.lua)陣列。

在Lua的側script.lua):

print "Start" 
for i=1,10 do 
    print(i, **session_id**) 
end 
print "End" 

「打印」是我自己的功能覆蓋,我想考績制度SESSION_ID它。 所以完整的情況是,我有SESSION_ID在C函數,這是我想傳遞給將使用它以後調用它是用C寫

任何幫助與打印功能的LUA腳本那:)?

回答

3

只需將session_id推入堆棧並將其傳遞到腳本中,當您使用pcall時。喜歡的東西:

// ... 
result = lua_load(L, luaByteCodeReader, file, "script", "bt"); 
lua_pushinteger(L, session_id); 
if(lua_pcall(L, 1, 0, 0) != 0) 
// ... 

讓你的腳本訪問它想:

local session_id = ... 
print "Start" 
for i = 1, 10 do 
    print(i, session_id) 
end 
print "End" 

另一種選擇,雖然不那麼吸引人,是添加session_id到Lua的全球環境:

// ... 
result = lua_load(L, luaByteCodeReader, file, "script", "bt"); 
lua_pushinteger(L, session_id); 
lua_setglobal(L, "session_id"); 
if(lua_pcall(L, 0, 0, 0) != 0) 
// rest of your code 

現在可以script.lua通過session_id訪問會話值。

+0

不需要使用'select'。 – lhf

+0

@ lhf是有點多餘的。固定!謝謝 – greatwolf

+0

我認爲'session_id'應該是(淺)userdata,即使它只是一個int,或者特別是如果它是。 – dualed