4

名前空間に多くの関数とクラスを含む多くの C++ コードがあります (boost など)。
今、LuaJiT2 をスクリプト エンジンとして埋め込もうとしていますが、関数の呼び出しや名前空間から他のものを使用することについては何も見つかりません。
では、FFI を使用して C++ 名前空間から LuaJIT に関数を渡すことは可能ですか?

4

2 に答える 2

8

標準の Lua API を使用して、名前空間スコープの関数とクラスの静的関数を Lua に公開できます。LuaJIT は通常の Lua インタープリターと完全に互換性があるため、これは通常の Lua インタープリターとまったく同じように行われます。

ただし、FFI はヘッダー ファイルの C ベースの解析に基づいているため、FFI を使用することはできません。そして、C++ 構文を使用しています。LuaJIT を使用する方法は FFIだけではありません。それはCに基づいたものにすぎません。

Lua を使用する C++ 固有のバインディング API (Luabind、SWIG など) は、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 に答える