我有很多 c++ 代码,其中包含命名空间中的很多函数和类(例如,boost)。
现在我正在尝试将 LuaJiT2 作为脚本引擎嵌入,但我找不到任何关于调用函数和使用命名空间中的其他内容的信息。
那么,是否可以使用 FFI 将函数从 c++ 命名空间传递给 LuaJIT?
问问题
2300 次
2 回答
8
您可以使用标准 Lua API 向 Lua 公开命名空间范围的函数以及类静态函数。这与使用常规 Lua 解释器完全一样,因为 LuaJIT 与它兼容。
但是你不能使用 FFI,因为 FFI 是基于对头文件的基于 C 的解析。而且您正在使用 C++ 语法。FFI 不是使用 LuaJIT 的唯一方式;它只是一个基于 C 的。
任何使用 Lua(Luabind、SWIG 等)的特定于 C++ 的绑定 API 都应该可以与 LuaJIT 一起正常工作。
于 2011-07-14T10:35:59.077 回答
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 方面做得非常出色。这么多很棒的功能。
于 2014-10-27T00:32:32.303 回答