2015-11-05 105 views
0

我有一個定義如下:如何申請LUA定義

#define namef (s, r, x) (p_name ((s), (r), (x))) 

我的文件Lua是如下:

tbl= { 
    name_func = module; 
}; 

我的代碼如下:

void getname(void) { 
    lua_State *L = luaL_newstate(); 
    luaL_openlibs(L); 
    char *arc = "luafun.lua"; 


    if (luaL_dofile(L, arc)) { 
     printf("Error in %s", arc); 
     return; 
    } 

    lua_getglobal(L, "tbl"); 
    lua_getfield(L, -1, "name_func"); 
    namef(r_name, lua_tostring(L, -1), sizeof(r_name)); 

    lua_close(L); 
    printf("done"); 
} 

r_name是一個陣列char r_name [11];

bu牛逼它給了以下錯誤:

PANIC: unprotected error in call to Lua API (attempt to index a nil value) 

我不知道爲什麼這是發生在C正常工作,更要改變LUA錯誤發生

+0

什麼是'p_name'? – 2015-11-05 01:53:00

+2

這不是一個函數,它是一個靜態數組聲明。你顯然不能稱它爲一個函數。 – 2015-11-05 02:16:20

+0

更多有什麼方法可以使用lua獲取價值? – Chozie

回答

2

首先,你要發佈的很多與問題完全無關的東西。我們不需要看到p_name或您的宏或與Lua錯誤無關的任何內容。請參閱:volume is not precision。作爲自己解決這個問題的一部分,你應該刪除多餘的東西,直到你有最小的代碼片段來重現問題。你會已經結束了這樣的事情:

lua_State *L = luaL_newstate(); 
    if (luaL_dofile(L, lua_filename)) { 
    return; 
    } 
    lua_getglobal(L, "tbl"); 
    lua_getfield(L, -1, "name_func"); 

的問題是,你的文件不被發現。每the manual,luaL_dofile返回true如果有錯誤和false如果沒有錯誤。

如果找到該文件,程序將中止。只有當文件不是找到它時,纔會嘗試索引tbl,它不能,因爲該全局變量不存在。

+0

編輯代碼時出錯,閱讀功能正確。但是該文件正在被讀取,我做了一個調試,並在這裏指出錯誤'namef(r_name,lua_tostring(L,-1),sizeof(r_name)); ' – Chozie

+1

因此,您要求我們解決問題的代碼甚至沒有問題的代碼?顯示實際的代碼。這個錯誤肯定不在'namef'行,因爲那裏沒有代碼試圖索引一個Lua表。 – Mud