LuaCインタフェースAPI 1
1729 ワード
最近仕事の中で
前言
Luaは仮想スタックを使用してCと値をやり取りする.スタック上の各要素はLua値です.(nil、数字、文字列など).LuaがCを呼び出すと、呼び出された関数は、C関数自体のスタックとは独立し、以前のLuaスタックとは独立した新しいスタックを得る.LuaがC関数に渡すすべてのパラメータが含まれており、C関数は返す結果をこのスタックに入れて呼び出し者に返します.
Luaスタックは、
関数#カンスウ#
スタックトップインデックスの取得
≪アクション|Actions|emdw≫:スタックの上部要素のインデックスを返します.インデックスは1から始まるので、この結果はスタック上の要素の数に等しい(0を返すとスタックが空であることを示す)
スタックトップインデックスの設定
役割:スタックトップのインデックスをこのインデックスに設定します.新しいスタックトップのインデックスが元より大きい場合、部分を超える要素はnilとして入力されます.新しいインデックスが0の場合、すべてのスタック要素が除去されます.
例
C Lua API使用
コンパイル実行出力:
begininit : stack top = 0 pushargvs : stack top = 2 settopfun : stack top = 1 settopfun : stack top = 0
まとめ
LuaとCの間の操作はスタックによってデータが伝達され、操作するときはスタックトップが溢れているかどうかに注意しなければなりません!!
Lua
を使ってスクリプト言語としてC/C++宿主言語から呼び出して、以前Lua
を理解したことがないため、使用の過程の中で多くの知らない地方に出会って、そのためしばらく時間をかけてよくLua
とCのインタラクティブなAPIの使用方式を理解することを決定して、この文章は第1編です.前言
Luaは仮想スタックを使用してCと値をやり取りする.スタック上の各要素はLua値です.(nil、数字、文字列など).LuaがCを呼び出すと、呼び出された関数は、C関数自体のスタックとは独立し、以前のLuaスタックとは独立した新しいスタックを得る.LuaがC関数に渡すすべてのパラメータが含まれており、C関数は返す結果をこのスタックに入れて呼び出し者に返します.
Luaスタックは、
を使用してスタック上の任意の要素を指すことができる.正のインデックスは、スタック上の絶対位置(1から始まる)である.負のインデックスはスタックトップからのオフセット量です.関数#カンスウ#
スタックトップインデックスの取得
int lua_gettop (lua_State *L);
≪アクション|Actions|emdw≫:スタックの上部要素のインデックスを返します.インデックスは1から始まるので、この結果はスタック上の要素の数に等しい(0を返すとスタックが空であることを示す)
スタックトップインデックスの設定
void lua_settop (lua_State *L, int index);
役割:スタックトップのインデックスをこのインデックスに設定します.新しいスタックトップのインデックスが元より大きい場合、部分を超える要素はnilとして入力されます.新しいインデックスが0の場合、すべてのスタック要素が除去されます.
例
C Lua API使用
#include
#include
#include
#include
int main(int argc, char *argv[])
{
lua_State *L = lua_open();
printf("begininit : stack top = %d
", lua_gettop(L));
lua_pushnumber(L, 5);
lua_pushnumber(L, 4);
printf("pushargvs : stack top = %d
", lua_gettop(L));
lua_settop(L, 1);
printf("settopfun : stack top = %d
", lua_gettop(L));
lua_settop(L, 0);
printf("settopfun : stack top = %d
", lua_gettop(L));
return 0;
}
コンパイル実行出力:
begininit : stack top = 0 pushargvs : stack top = 2 settopfun : stack top = 1 settopfun : stack top = 0
まとめ
LuaとCの間の操作はスタックによってデータが伝達され、操作するときはスタックトップが溢れているかどうかに注意しなければなりません!!