是否可以使用luajit ffi中的c ++命名空间中的函数?

时间:2011-07-14 10:19:04

标签: c++ lua luajit

我有很多c ++代码,其中包含很多名称空间中的函数和类(例如,boost)。
现在我试图将LuaJiT2作为脚本引擎嵌入,但我找不到任何关于调用函数和使用命名空间中的其他内容的内容。
那么,是否可以使用FFI将函数从c ++命名空间传递给LuaJIT?

2 个答案:

答案 0 :(得分:8)

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

但是你不能使用FFI,因为FFI基于对头文件的基于C的解析。而你正在使用C ++语法。 FFI不是唯一使用LuaJIT的方式;它只是一个基于C的。

使用Lua(Luabind,SWIG等)的任何特定于C ++的绑定API也可以与LuaJIT一起使用。

答案 1 :(得分:2)

除了C之外,可以使用不同的名称修改。之所以不是“常见”,是因为C ++名称修改非常符合编译器/平台: http://lua-users.org/lists/lua-l/2011-07/msg00502.html

所以这种声明是有效的:

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

然后你可以调用Test1_Method1。 Mike Pall在luajit做了一个了不起的工作。这么多很棒的功能。