能否在Luajit的ffi中使用C++命名空间中的函数?

我有很多包含许多函数和命名空间(比如boost)中的类的C++代码。

现在我正在尝试将LuaJIT2嵌入为脚本引擎,但我无法找到关于如何从命名空间中调用函数和使用其他内容的任何信息。

因此,是否有可能使用FFI将C++命名空间中的函数传递给LuaJIT?

原文链接 https://stackoverflow.com/questions/6691651

点赞
stackoverflow用户734069
stackoverflow用户734069

您可以使用标准的 Lua API 将命名空间范围的函数以及类静态函数暴露给 Lua。这与常规的 Lua 解释器完全相同,因为 LuaJIT 与其完全兼容。

但您无法使用 FFI,因为 FFI 基于 C 的头文件解析,而您正在使用 C++ 语法。 FFI 不是使用 LuaJIT 的 唯一 方法;它仅是基于 C 的方法之一。

任何使用 Lua 的特定于 C++ 绑定的 API(如Luabind、SWIG等)也应该能够很好地与 LuaJIT 一起使用。

2011-07-14 10:35:59
stackoverflow用户88888888
stackoverflow用户88888888

可以使用不同于 C 的不同 name mangling。之所以它不是“常见”的,是因为 C++ name mangling 非常依赖编译器/平台: http://lua-users.org/lists/lua-l/2011-07/msg00502.html

因此,这种声明是有效的:

ffi.cdef[[
void Test1_Method1(void) asm("_ZN5Test17Method1Ev");
]]

然后,您可以调用 Test1\_Method1。 Mike Pall 在 luajit 中做得非常出色。有这么多优秀的功能。

2014-10-27 00:32:32