Lua使用lua_pcall进行无保护的错误

时间:2013-06-24 09:33:57

标签: lua

我正在使用Lua Protected调用,但我收到了一个无保护的错误:

lua_getfield( m_L, LUA_GLOBALSINDEX, "startIteration" );    // 1
if( lua_isfunction( m_L, -1 ) ){
    lua_pushnumber( m_L, n );                               // 2
    auto ret = lua_pcall( m_L, 1, 0, 0 );                   // 0
    checkLuaReturn( m_L, ret );
}else{
    lua_pop( m_L, 1 );                                      // 0
}

错误是:

PANIC: unprotected error in call to Lua API (../example/ex01.lua:31: attempt to index global 'raster' (a nil value))

Lua代码是:

function startIteration( num )
   io.write( "Start iteration " .. num .. "\n" )
   raster.grass.save( "output.png" )
end

如何解决它,获得真正受保护的电话?

更新:修复额外的弹出

1 个答案:

答案 0 :(得分:0)

这似乎与你的lua_pcall()无关,而是与你的lua代码无关。 行raster.grass.save( "output.png" )是错误所在的位置。

尝试将其改为:

if raster and type(raster) == 'table' then
    if raster.grass and type(raster.grass) then
        raster.grass.save()
    end
end

但是,这不会解决您的问题,问题是您在raster创建之前调用变量raster的成员。