1

luasql.sqlite3モジュールは C プログラムに正常にコンパイルされ、静的にリンクされました。しかし、モジュールはまだ登録されていないようです。require 'luasql.sqlite3'Lua スクリプトでは、の呼び出しは常に失敗します。

他のいくつかのモジュールはluaL_register、自分自身を登録するために呼び出します。しかしluaL_register、 では呼び出されませんluaopen_luasql_sqlite3luasql.sqlite3この場合、どのように登録すればよいですか?

Lua-5.1.5 を使用しています。

luaopen_luasql_sqlite3 のソースコードは一番下にあります

4

3 に答える 3

2

luaopen_関数をpackage.preloadテーブルに配置する方法は次のとおりです。

lua_getfield(L, LUA_GLOBALSINDEX, "package");
lua_getfield(L, -1, "preload");
lua_pushcfunction(L, luaopen_socket_core);
lua_setfield(L, -2, "socket.core");
于 2012-11-07T07:01:32.733 に答える
1

require指定されたモジュール名を使用して DLL を追跡し、その DLL から特定の関数をフェッチするため、DLL で動作します。C および C++ にはイントロスペクションがないため、静的ライブラリでは自動的には機能しません。で始まる C 関数を動的に見つけることはできませんluaopen_

そのため、このモジュールを Lua コードで使用できるようにすることを Lua パッケージ システムに伝える必要があります。luaopen_これを行うには、関数をpackage.preloadテーブルに貼り付け、モジュールが呼び出される名前を付けます。

于 2012-09-02T13:37:12.143 に答える