0

GUI を構築するために wxLua で Lua を使用しています。通常、アプリを終了すると、Lua から何も出力されません。

ただし、このようにwxListView(myListViewと呼ばれる)に関数を追加しました

myListView.foo = bar

function bar (self)
    -- do something with the wxListView
end

foo() を呼び出したかどうかに関係なく、アプリを終了すると、Lua から次の出力が得られます。

~wxLuaObject -2 1 0

割り当てをコメントアウトすると、アプリを終了するときに出力が得られません。代わりに、コードの後半で foo を nil アウトします。

myListView.foo = nil

その行が実行されるとすぐに同じ出力が得られ、プログラムの終了時に再び出力されます。

アウトプットの意味は?私は何を間違っていますか?どうすれば修正できますか?

ありがとう!

4

1 に答える 1

1

これは、wxLuaObject が破棄されm_reference == LUA_NOREF(この場合は -2)、Lua 状態オブジェクトが終了状態にない (この場合は 0 と報告されている) 場合の内部診断のようです。

// this is from modules/wxlua/src/wxlbind.cpp (starts on line 83 in my version)
wxLuaObject::~wxLuaObject()
{
    if ((m_reference != LUA_NOREF) && m_wxlState->Ok() && !m_wxlState->IsClosing())
    {
        m_wxlState->wxluaR_Unref(m_reference, &wxlua_lreg_refs_key);
        m_reference = LUA_NOREF;
    }
    //else if (!m_wxlState->IsClosing())
    //    wxPrintf(wxT("~wxLuaObject %d %d %d\n"), (int)m_reference, (int)m_wxlState->Ok(), (int)m_wxlState->IsClosing());

このメッセージは私の wxlua コード (2.8.12.1) でコメントアウトされていますが、バージョンを確認し、必要に応じてアップグレードすることをお勧めします。~wxLuaObjectこれは、ソース コードでメッセージが表示される唯一の場所です。無害に見えますが、あなたがしていることに関する他の問題を潜在的に示している可能性があります。

于 2012-09-27T22:53:24.117 に答える