Luaプログラミング入門 > 第8章 C言語との連携 > CからLuaを呼び出す > Luaにグローバル変数を登録する


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

Luaにグローバル変数を登録する 応援する 

C言語側からLuaのグローバル変数を登録してみましょう. ここではTESTという変数(値は10とする)を登録してみます.

まずは次のようなコード,sample.luaを作ります.

--sample.lua

function show()
        if TEST == nil then
                print("TESTは登録されていません")
        else
                print("TEST の値は" .. TEST .. "です")
        end
end

そしてC言語側のコードは次のようになります.

#include <stdio.h>

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

void showTest(lua_State* L)
{
        //show関数をスタックに積む
        lua_getglobal(L, "show");
        //show関数を呼び出す 引数0個, 戻り値0個
        if(lua_pcall(L, 0, 0, 0) != 0) {
                printf("関数呼び出し失敗\n");
                printf("error : %s\n", lua_tostring(L, -1) );
                lua_pop(L, 1);
        }
}

int main (void)
{
        int x = 10, y = 5;

        //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のshow関数を呼び出す
        showTest(L);
        //変数TEST(値は10)をLuaに登録
        lua_pushnumber(L, 10);
        lua_setglobal(L, "TEST");
        //TEST表示
        showTest(L);

        lua_close(L);
        return 0;
}

実行結果

TESTは登録されていません
TEST の値は10です

Luaのshow関数を呼び出すためのC言語関数showTestを作成しました. 1回目にshow関数が呼び出された時は,変数TESTはまだ存在しないので nilとなっています. 2回目に呼び出された時は,C言語側からTEST=10として登録されているので, 値が表示されます.

さて,グローバル変数を登録するにはlua_setglobal関数を使用します.

void lua_setglobal (lua_State *L, const char *name);

この関数はスタックトップの値をnameとしてLuaに登録します. 実はlua_setglobal関数はlua_setfield関数のマクロとして定義されています.

#define lua_setglobal(L,s)   lua_setfield(L, LUA_GLOBALSINDEX, s)

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

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