C言語からLuaを読み込む
C言語からLuaスクリプトを読み込んで実行する方法を解説します。
まずはコードを見てみましょう。
// sample.c #include "lua.h" #include "lualib.h" #include "lauxlib.h" int main(void) { // Luaステートオブジェクトの作成 lua_State *L = lua_open(); // Luaの標準ライブラリを読み込む luaL_openlibs(L); // Luaスクリプトを読み込む luaL_dofile(L, "sample.lua"); // Luaステートオブジェクトを閉じる lua_close(L); return 0; }
-- sample.lua print("Luaスクリプトの読み込み")
まずはsample.cのコードを解説します。
lua_State構造体を作成します。lua_StateはLuaVMの状態を管理する構造体です。
lua_Stateが正確になんなのかを説明するのは難しいのですが、C言語とLuaスクリプトを仲介するものと考えてください。
ちなみにlua_openによってlua_State構造体を作成していますが、lua_openはマクロであり、実態はluaL_newstate関数です。
// Luaの標準ライブラリを読み込む luaL_openlibs(L);
次にluaL_openlibs関数を使い、Luaの標準ライブラリをLuaスクリプトで使用できるようにします。
今回で言うと、sample.luaでprint関数を使用するために必要です。
// Luaスクリプトを読み込む luaL_dofile(L, "sample.lua");
準備が整ったところでluaL_dofileを呼び、Luaスクリプトを読み込んで実行します。
luaL_dofileはマクロであり、実態はファイルを読み込むluaL_loadfile関数とLuaの関数を呼び出すlua_pcall関数を実行しています。
// Luaステートオブジェクトを閉じる lua_close(L);
終了前にLuaステートオブジェクトを閉じる lua_close関数を呼び出します。
-- sample.lua print("Luaスクリプトの読み込み")
Luaスクリプトのほうは説明不要でしょう。C言語プログラムからluaL_dofileが呼ばれたときにprintが実行され、コンソールに「Luaスクリプトの読み込み」と表示されます。