Luaに値を渡すときやLuaから値を貰う時には、スタックを使います。
FILO(First in Last Out)の構造としてのスタックの意味もあるのですが、
もうひとつ、コンバータとしての役割も持っています。
Luaは動的型付けのため、静的型付けのC言語で直接値をとることができません。
そこで、スタックを介して、この変換を行います。
上のようなLuaを実行したとして、まずstorenameの値を得る方法です。
storenameはグローバル変数ですので以下のようにします。
lua_getglobal(L, "storename");
if (lua_isstring(L, -1)){
const char *storename = lua_tostring(L, -1);
}
lua_pop(L, 1);
lua_getglobal()で"storename"という名前のグローバル変数の値をスタックに積みます。
もし、この値が存在していないなら、nilが積まれます。
そして、stringであることを確認し、値を取り出します。
最後に、後始末としてスタックから取り除きます。
逆にstorenameに値をセットするには以下のようにします。
lua_pushstring(L, "wankumart");
lua_setglobal(L, "storename");
まず、Luaに渡さないといけないので、lua_pushstringでスタックに積みます。
そして積んだ値をlua_setglobalでLuaが受け取ります。
lua_setglobalは取り込む際にスタックから値を取り除くので後始末は要りません。
スタックがどのように動くかというのを把握してないといけないので、
この辺がLuaの面倒なところです。