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スクリプトの読み込み」と表示されます。



inserted by FC2 system