ここで解決策が見つからないという問題にようやく遭遇しました。ここhttp://lua-users.org/wiki/CppConvenientLuaWrapperClassにあるLuaラッパークラスを使用しています。完全な API に加えて、シリアル通信などのその他の機能を公開することができました。
この Lua ラッパーの背後にある概念は、コンパイルする前にすべてのメソッドを公開することです。そのため、プログラムを実行しているときに、すべてのメソッドが Lua スタックに追加され、その方法でそれらを実行できます。現在のアイデアは、メソッドを公開するこのプロセスを完了するために一種の Dll を構築することです。この方法では、公開されたすべてのメソッドを含むバージョンをリリースする必要はなく、複数の dll ファイルを介してメソッドをロードします。
別のテーブルを作成し、そのテーブルに他のメソッドを登録しようとしましたが、それにより、以前に公開されたメソッドが機能しなくなりました。
私が考えることができる他の方法は、必要なすべてのメソッドを含む dll を C で作成し、それを直接 Lua にロードすることです。しかし、私は他の方法が良いと思います。
同様のことができましたか?私は何か間違った概念を持っていますか?
ありがとう
うーん...現時点ではラッパーを変更したくありません。何とかやり遂げることができたと思います。プラグイン関数用の新しいテーブルを追加する代わりに、Lua から呼び出される関数名と cClosures を含む新しいサブテーブルを追加しました。したがって、最後に次のようになります。
application.functionName()
application.plugin.functionName()
このように動作しても、うまくいきます。aplication[pluginFunction] の代わりに application[plugin][pluginFunction] に追加する関数を公開するときに、lua_settable をどのように参照できるのでしょうか?! これは、通常の機能がどのように公開されるかです。
//mState is a pointer to a Lua_State
lua_pushstring( mState, functionName );
//methodDesc is a pointer to an object that describes the function arguments/returns
lua_pushlightuserdata( mState, methodDesc );
//exposeMethodProxy is the method that is responsible for conneting lua c-calls to the c-functions
lua_pushcclosure( mState, exposedMethodProxy, 1 );
//mMethodTableIndex is a member variable that contains the index of the table tha hold all exposed functions
lua_settable( mState, mMethodTableIndex );
cclosures をメイン テーブル (mMethodTableIndex) に mainTable[functionName] としてではなく、maintable[plugin][functionNane] に追加する方法についてのアイデアはありますか?