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


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

Luaのグローバル変数を取得する 応援する

前節で登場したsample.luaから変数NAMEとSIZEの値を取得してみましょう. NAMEは文字列で取得し,SIZEはNUMBERで取得します.

#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;
        }
        
        //PATHを取得しスタックに積む
        lua_getglobal(L, "NAME");
        //SIZEを取得しスタックに積む
        lua_getglobal(L, "SIZE");
        
        if( !lua_isstring(L, -2) || !lua_isnumber(L, -1) ) {
                printf("正しく値が取得できませんでした\n");
                return 1;
        }
        printf("NAME : %s\n", lua_tostring(L, -2));
        printf("SIZE : %d\n", lua_tointeger(L, -1));

        lua_close(L);
        return 0;
}

実行結果

NAME : HELLOWORLD
SIZE : 640

lua_getglobal関数はグローバル変数を取得する変数で以下のように定義されています.

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

nameには取得したいグローバル変数の変数名を指定します. 実はこの関数はlua_gettable関数のマクロとなっています.

#define lua_getglobal(L,s)  lua_getfield(L, LUA_GLOBALSINDEX, s)

LUA_GLOBALSINDEXはLuaのグローバル変数がある領域テーブルを指しています.

さて,上記のサンプルですがスタックにはNAMEとSIZEが残ったままになっています. 実際のプログラムではNAME,SIZEを使用したあとはきちんとポップしておきましょう.


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

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