【问题标题】:Use C++ library object from within Lua在 Lua 中使用 C++ 库对象
【发布时间】:2019-02-18 17:42:49
【问题描述】:

所以在过去的几个小时里,我一直试图弄清楚如何在 Lua 中使用包含在静态(或动态)库中的 C++ 类。我找到了几个包,例如LunaFiveSimpleCppBinding,但我似乎不明白如何正确使用它们。从我看到的有一个主函数,因此我猜它不是一个库,而是一个我运行然后运行 ​​Lua 脚本的可执行文件,它将挂钩应用程序并获取类,还是什么?我基本上想做的是:

  1. 创建一个库,其中包含例如 C++ 中的“Player”类
  2. 修改此库以在 Lua 中使用
  3. 以某种方式使用这个类和它在 Lua 中的方法,就像它是一个 Lua 类一样

这样的事情可能吗?如果是这样,有人可以解释如何做到这一点吗?

我目前使用的是 Windows,但我也可以在 Linux 上进行操作。在 Windows 上我使用 VS,在 Linux 上我将使用 CLion 与 g++ 配对。 Lua 5.3。

我不确定这是否有点相关,但我正在为 FiveM(GTA V 多人游戏客户端)开发游戏模式。 FiveM 默认带有对脚本的 Lua 支持,但我喜欢使用一些 C++ 标准库和功能。因此,我真的很想用 C++ 为服务器创建一些库,然后在 FiveM 提供的 Lua 中使用它们。

【问题讨论】:

  • 问:你在哪个平台上?您使用的是什么 C/C++ 编译器?什么版本的 Lua?
  • 我编辑了帖子并添加了更多信息

标签: c++ lua


【解决方案1】:

静态库:不可能。您的选择是:1. 具有某种接口的动态库(二进制)可由 Lua 可执行文件(Alien,Lua-specific hooks....)或 2. 包含 Lua 引擎和 C++ 内容的自定义可执行文件以及一些胶水。您使用“main”函数的示例可能是后一种类型。

【讨论】:

  • 动态库没问题,只要我可以按照我的意图使用它们。我最近更新了我的帖子,不知道您是在更新之前还是之后阅读。
【解决方案2】:

Lua 从一开始就被设计为与用 C 和其他传统语言编写的软件集成。这种语言的双重性带来了许多好处。 Lua 是一门小巧而简单的语言,部分原因是它没有尝试做 C 已经擅长的事情,例如纯粹的性能、低级操作或与第三方软件的接口。
-Preface

我理解您的痛苦,但是 Lua 并不是按您的意图使用的,它实际上是为了反其道而行之。

我能想到的最接近您想要的结果的方法是拥有一个主机 C++ 应用程序,您可以从中立即创建一个 lua state 并将您从 C++ 程序调用的函数的结果推送到堆栈中,在return 可以在您的 Lua 脚本中使用并进行处理。

如果这是你可以适应的,here is a great starting point

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 2015-02-07
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2020-05-28
    • 2014-10-10
    相关资源
    最近更新 更多