2009-02-19 94 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