【问题标题】:Mysterious output from Lua after modifying a control修改控件后 Lua 的神秘输出
【发布时间】:2012-09-27 20:05:16
【问题描述】:

我正在使用 Lua 和 wxLua 来构建 GUI。通常当我退出应用程序时,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

当该行被执行时,我立即得到相同的输出,然后在程序退出时再次得到。

输出是什么意思?我究竟做错了什么?我该如何解决?

谢谢!

【问题讨论】:

  • 我可能错过了你想要做的事情。我尝试了以下代码,它工作正常(我的消息被打印,没有其他消息被打印):listCtrl = wx.wxListView(panel, ID_LISTCTRL, wx.wxDefaultPosition, wx.wxDefaultSize); listCtrl.foo = function() print "something" end; listCtrl.foo()。这是在 Windows 上。你在哪个平台上?
  • @Paul - 感谢您的回复!它是 Win 7 64 位。我不知道它是否可以解释我的结果,但我没有提到我正在使用 xrc 文件进行 gui 布局。我在命令行提示符下使用“lua.exe myApp.lua”运行程序,当它退出时,我得到了神秘的消息。

标签: lua wxwidgets


【解决方案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 消息的地方。它似乎是无害的,但它可能指向您正在做的其他问题。

【讨论】:

  • 谢谢!下次我会不那么犹豫去挖掘源代码了:)
猜你喜欢
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 2013-01-08
  • 1970-01-01
  • 2015-06-29
  • 2018-02-26
相关资源
最近更新 更多