问题标签 [luabind]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在 Windows 中构建 Luabind
我在使用 VS 2010 使 Lua 和 Luabind 在 Windows 7 下工作时遇到问题。到目前为止,我已经从http://luabinaries.sourceforge.net下载了 LuaBinaries,从http://www.hci.iastate.edu/下载了 Luabind ~rpavlik/doxygen/luabind/docs.html。我已经在命令行中相应地设置了我的环境变量 BOOST_ROOT 和 LUA_PATH,如 Luabind 的安装文件中所述,我无法克服这个错误:
如果有人能够在 Windows 下构建 Luabind,任何提示都非常感谢!更重要的是,如果有人能够使用 Lua 和 Luabind 建立一个 VS 2010 C++ 项目并愿意分享,我将不胜感激!
c++ - Luabind:派生类作为参数
我最近一直在学习 Luabind,打算集成到我们的软件中。我遇到了几个问题,我一直在查看 Luabind 的 Rasterbar Software 文档,但无法解决。基本上,我公开了一个将字符串和抽象基类作为参数的函数。首先,我不确定我是否以正确的方式进行此操作,或者在 lua 中可能需要一些特殊处理才能使其正常工作。无论如何,这是代码
BaseFactory 是一个抽象基类,它返回一个 UIComponent(按钮、文本等),我们派生了一个名为 TemplateFactory 的工厂,它基本上可以像这样实例化。
然后我们会像这样将这些传递给 c++ 中的 UIFactory ...
在卢宾德...
并在 lua...
最后一行没有执行,我检查了按钮工厂和 ui 工厂是否正在创建并且它们是。有什么我想念的吗?
非常感谢您的帮助。
c++ - 从 C++ 到 lua 的二维数组
那么,将多维数组从 C++ 传递到 Lua 真的可行吗?
或者我应该把它变成一个普通数组,将它传递给 Lua 并再次将它转换为 2d 数组?
如果可能的话,可以说我有这个
c++ - luabind:无法从由非内置类索引的表中检索值
我正在使用 Ryan Pavlik 的主发行版中的 luabind 0.9.1 和 Lua 5.1、Win XP SP3 上的 cygwin + 最新补丁 x86、boost 1.48、gcc 4.3.4。Lua 和 boost 是 cygwin 预编译的版本。
我已经成功地在静态和共享版本中构建了 luabind。
两个版本都通过了所有测试,除了在两个版本中都失败的 test_object_identity.cpp 测试。
我已将问题追查到以下问题:如果表中的条目是为 NON 内置类(即不是 int、string 等)创建的,则无法检索该值。
这是一个演示这一点的代码片段:
tabc[1] 确实是 10 而 tabc[temp_object] 不是 30!(实际上,它似乎是零)
但是,如果我使用 iterate 遍历 tabc 条目,则有两个条目具有正确的键/值对。
有任何想法吗?
顺便说一句,像这样重载 == 运算符:
和
不改变结果。
我还尝试从 [] 运算符切换到 settable() 和 gettable()。结果是一样的。我可以通过调试器看到调用了密钥的默认转换,所以我猜错误来自其中的某个地方,但我无法弄清楚究竟是什么问题。
正如以下简单的测试用例所示,Luabind 对复杂类型的转换肯定存在错误:
希望比我聪明的人能解决这个问题,谢谢
我已经将问题追溯到这样一个事实,即 Luabind 每次使用复杂值作为键时都会创建一个 NEW DISTINCT 对象(但如果您使用原始值或对象则不会)。
这是一个小测试用例来证明这一点:
注意 tabc[tp] 首先是值 5,然后在通过 key 对象访问时被 7 覆盖。但是,当通过 tp 再次访问时,会创建一个新条目。这就是 gettable() 随后失败的原因。
谢谢,大卫
c++ - 使用 luabind 和 std::shared_ptr 进行继承
我有一个依赖std::shared_ptr
很多的 API(一个特定的 GUI 库),即它们通常用作函数参数并存储在其他对象中。例如,容器小部件(如拆分器和框)会将其子小部件存储在shared_ptr
s 中。现在我想通过 luabind 将此 API 映射到 Lua。在理想情况下,Luabind 会在 shared_ptr 中创建新对象,并允许我将这些对象直接传递给采用 shared_ptr 参数的函数。这似乎适用于单个课程,例如:
虽然我这样声明它,但我可以公开和使用void foo(std::shared_ptr<Button> const&)
.
现在 luabind 手册提到,为了使用类的层次结构,我必须对层次结构中的所有类使用相同的 shared_ptr 模板实例,例如
现在我不能再调用foo
了——它将无法从 Lua 中找到函数。我能以某种方式让 luabind 仍然支持在shared_ptr
s 中传递按钮吗?另外,我想知道为什么 luabind 要求您对层次结构中的所有类使用相同的智能指针,而不是仅仅将它们转换为基类指针。
c++ - 如何链接到 Lua 中的回调函数,以便在重新加载脚本时更新回调?
我正在使用 LuaBind 在我的游戏中实现 Lua 脚本,我不清楚的一件事是在游戏中重新加载脚本的后勤工作。
目前,使用 LuaBind C++ 类luabind::object
,我将对 Lua 回调的引用直接保存在使用它们的类中。然后我可以使用luabind::call_function
该对象从 C++ 代码中调用 Lua 代码。
我还没有对此进行测试,但我的假设是,如果我重新加载脚本,那么所有函数都将被重新定义,但对旧函数的引用仍将以luabind::object
C++ 代码所持有的形式存在。我希望能够将旧的换成新的,而不必为游戏中的每个脚本挂钩手动管理它。
如何最好地改变这一点,使过程有效?
我的第一个想法是不要直接保存对函数的引用,而是可能保存函数名,并在每次我们想调用它时按名称获取函数。我正在寻找更好的想法!
lua - LuaBind 和 package.loadlib
我正在尝试使用 luabind 在这里http://www.rasterbar.com/products/luabind/docs.html完成教程,但是我在加载库时遇到了问题。我目前使用的是 5.1 版的 lua,所以我相信我会使用 package.loadlib 而不是 loadlib。我做了一个简单的dll,它是这样的:
这构建得很好。但是,当我尝试运行此代码时,我在 lua 中遇到错误:
它声明 greet 是 nil。如何正确加载 dll 中的函数?
c++ - 带有元数据的 Lua 回调
我想在 Lua 中为脚本编写者设置几个函数,但是当调用这些函数时,我希望它们实际调用一个带有我定义的参数的函数。这可能看起来像:
卢阿:
C++:
}
所以我对设置有点困惑。我正在尝试使用参数注册回调。这就是我到目前为止所拥有的,并且有些东西没有通过函数注册来保存参数;它似乎只保存我添加的最后一个参数。
当 lua 调用我的回调时,我总是看到 value[1],而不是 value[0]。我使用了注册回调然后添加表格的概念,但我不确定这会让我更进一步。
至于原因:我正在尝试抽象函数名称以使我们的 lua 程序员更容易编写代码,但这些只需要转换为相同的参数化函数。想想它通过传递一个参数来添加更改设置,但命名不同。
想法?
c++ - 将 lua 表从 C++ 传递到 .Lua 脚本
我花了过去 6 个小时试图解决这个问题!我无法到达任何地方:s
我希望能够在 c++ 文件中创建一个 lua 表,然后将其传递给一个 lua 脚本文件,该文件具有以下 lua 函数:
我用两个字符串动态创建了一个一维数组:
所以现在我在堆栈顶部有桌子。我已经通过写这个来验证它: if( lua_istable(L,lua_gettop(L)))` 它返回 1,这意味着它是一个表。
然后我这样做了:
所以我得到了那个错误: 无法运行脚本:尝试调用表值
请注意,该文件还有我从 C++ 成功调用的其他几个函数。
有人可以帮我解决这个错误吗?这可能是LUA的错误吗?cz 我非常正确地遵循了这些步骤......我猜!
c++ - lua+luabind,栈顶没有错误信息,在“运行时错误”之后
我正在尝试将 lua 嵌入到我的游戏引擎中。直到现在一切都很好。我开始注册与游戏引擎交互的函数(例如 move_object(id, x, y)),并且注册工作正常。接下来,我尝试像这样使用它:
这给了我一个来自 luabind 的“运行时错误”异常。我到处搜索,根据互联网(和 luabind 源),错误消息应该仍然在 lua 堆栈的顶部。我尝试捕获 luabind::error,并像这样打印堆栈的顶部:
像这样:
并且都打印这个:
我假设这只是我从处理程序表中调用更新函数时推送的最后一个值。这个值应该在遇到错误时被详细的错误字符串覆盖,对吗?根据luabind源文件“error.hpp”的定义class error
:
我相信我的 lua 代码的问题实际上在于我的 move_object 函数的注册(更新函数运行。我知道这一点,因为我之前取消了该 print 调用的注释),但如果没有更好的错误信息,我无法确定!哈哈
我修复了错误,如果它有任何帮助。我正在定义 move_object 函数,如下所示:
但显然,您不能使用 luabind 将静态成员函数定义为常规函数。我把它改成了这个(move_object
在 C++ 中做了一个常规的全局函数):
我不知道这是否有助于解决原始问题,但我认为更多信息不会造成伤害!:)