2009-02-19 48 views
1

如何檢查Lua中堆棧頂端的值?檢查C++中Lua堆棧項的值

我有以下的C++代碼:

if (luaL_loadfile(L, filename) == NULL) { 
     return 0;// error.. 
    } 

    lua_pcall(L,0,0,0); // execute the current script.. 

    lua_getglobal(L,"variable"); 

    if (!lua_isstring(L,-1)){ // fails this check.. 
     lua_pop(L,1); 
     return 0; // error 
} 

有問題的文件的內容是

-- A comment 
variable = "MyString" 

任何想法?

回答

2

可能的問題是luaL_loadfile()被記錄爲返回與lua_load()相同的值或一個附加的錯誤代碼。無論哪種情況,返回值都是int,其中0代表成功,非零值代表錯誤代碼。

因此,測試luaL_loadfile(...) == NULLtrue如果文件已加載,但代碼調用該錯誤並返回。

功能lua_pcall()也會返回一個狀態碼,您可能也想驗證一下。

否則,腳本,並不包括創建一個全局變量,並lua_getglobal()將檢索到的地方它可能與lua_isstring()測試堆棧,或者可能更有效地讓你回到它的價值,如果它具有足夠的串像lua_tostring() 。後者函數將返回一個const char *指向一個以nul結尾的字符串,或者如果堆棧索引處的值不能轉換爲字符串,則返回NULL。請參閱Lua參考手冊的鏈接以瞭解其餘細節,以及關於在循環內使用lua_tostring()的警告。

編輯:我在幾個地方添加了更好的手冊鏈接。

+0

將按照這條線索並更新您的結果,謝謝! :D – krebstar 2009-02-19 06:58:52

0

我想你想用lua_dofile替換luaL_loadfile。 lua_pcall是不必要的。我的猜測是使用luaL_loadfile將函數加載爲函數,然後使用pcall運行它可能無法創建所需的全局變量。

+0

不,lua_dofile加載文件並運行它。我想分開做。我是否正確使用loadfile和pcall? – krebstar 2009-02-19 06:50:10