1

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

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

我怎样才能解决它,以获得真正受保护的电话?

更新:修复了额外的流行音乐

4

1 回答 1

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

于 2013-08-11T16:58:20.020 回答