如何在 Lua 中使用 C++ 类库对象

所以,在过去的几个小时里,我一直在尝试从 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 中使用它们。

点赞
用户5294619
用户5294619

静态库不可行。你的选择是:1. 一个带有某种接口可被 Lua 可执行文件访问的动态库(Alien、Lua特定的钩子...),或者 2. 一个自定义的可执行文件,其中包括 Lua 引擎和 C++ 代码以及一些支持代码。你所提供的 'main' 函数的例子可能属于后者。

2018-09-13 23:39:20
用户9572393
用户9572393

Lua 从一开始就被设计成与 C 语言和其他常规语言相结合的。这种语言的双重性带来了许多好处。Lua 是一种微小而简单的语言,部分原因是它不会尝试做 C 已经擅长的事情,比如纯性能,低级操作或与第三方软件的接口。

- 前言

我理解你的痛苦,但是 Lua 实际上不是被设计成以你打算的方式使用的,而是被构建成另一种方式。

我所能想到的最接近你想要的结果的方法是,有一个主机 C++ 应用程序,从该应用程序立即创建一个 lua state,并将从 C++ 程序调用的函数的结果 push 到堆栈中,作为一个返回值可以在你的 Lua 脚本中使用并处理。

如果这是你可能能够适应的东西,这是一个很好的起点

2018-09-14 04:41:00