Luaプログラミング入門 > 第8章 C言語との連携 > CからLuaを呼び出す > Luaファイルを読み込む


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

Luaファイルを読み込む 応援する 

まずはC言語側からLuaで書かれたコードを読み込んでみましょう. 次のようなLuaソースコードを作成したとします. このコードのファイル名はsample.luaです.

--sample.lua

--グローバル変数

NAME = "HELLOWORLD"
SIZE = 640

このLuaファイルを読み込むためのC言語コードは以下のようになります.

#include <stdio.h>

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

int main (void)
{
        //Luaを開く
        lua_State* L = luaL_newstate();
        //Luaの標準関数を使用できる状態にする
        luaL_openlibs(L);
        //Luaファイルsample.luaを読み込む
        if( luaL_loadfile(L, "sample.lua") || lua_pcall(L, 0, 0, 0) ) {
                printf("sample.luaを開けませんでした\n");
                printf("error : %s\n", lua_tostring(L, -1) );
                return 1;
        }
        //ここに何か処理を書く

        lua_close(L);
        return 0;
}

このプログラムはsample.luaを読み込むだけで何も処理は行いません.

ここで新たに3つの新しい関数が登場しました. まず,luaL_openlibs関数ですが,この関数は Lua内で標準関数が利用できるようにするものです. この関数を呼び出さないとLua内でprint関数などが使用できません.

luaL_loadfile関数ですが,次のような定義となっています.

int luaL_loadfile (lua_State *L, const char *filename);

filenameには開きたいLuaファイルを指定します. この関数はファイルが読み込めなかった場合 (ファイルが存在しない,文法が間違っていた等), LUA_ERRFILEを返します.

lua_pcall関数ですが,この関数は本来Luaの関数を呼ぶためのものです. ここでは使い方を詳しく説明しませんが, loadfileを行った後ファイルを実行する役目を果たしています.

luaL_openlibs関数及びlua_pcall関数は成功すると0を返します. この戻り値を使ってファイルが正しく読み込めたかどうかを判定できます. また,エラーが発生した場合,エラーの詳細をスタックに積んでくれます. よってスタックトップの値を参照すればエラーの原因を特定できます.

では,試しにluaL_loadfile関数の引数にsample.luaではなく 存在しないファイルtest.luaを 指定してみましょう. 結果は以下のようになります.

実行結果

sample.luaを開けませんでした
error : cannot open test.lua: No such file or directory

またLuaファイルの2行目に適当な文法の文字列を挿入してみます. 挿入した文字列は if a-b=c then end です.

実行結果

sample.luaを開けませんでした
error : sample.lua:2: 'then' expected near '='

[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation