この初版はLua 5.0向けに書かれました。後のバージョンでもほとんどの場合で関連していますが、いくつかの違いがあります。
4版はLua 5.3を対象としており、Amazonと他の書店で入手可能です。
本を購入することで、Luaプロジェクトをサポートすることもできます。
![]() |
Luaでのプログラミング | ![]() |
第4部 C API第26章 LuaからCを呼び出す |
Luaの拡張の基本的な手段として、アプリケーションが新しいC関数をLuaに登録することができます。
LuaがC関数を呼び出すことができるとは、LuaがすべてのC関数を呼び出すことができるという意味ではありません。(LuaがすべてのC関数を呼び出すことができるようにするパッケージもありますが、移植性や堅牢性はありません。)前述のとおり、CがLua関数を呼び出すには、引数を渡し、結果を得るための単純なプロトコルに従う必要があります。同様に、C関数がLuaから呼び出されるには、引数を受け取り、結果を返すためのプロトコルに従う必要があります。さらに、C関数をLuaから呼び出すには、登録する必要があります。つまり、適切な方法でアドレスをLuaに渡す必要があります。
LuaはC関数を呼び出すとき、CがLuaを呼び出すために使用するのと同じタイプのスタックを使用します。C関数はスタックから引数を受け取り、スタックに結果をプッシュします。スタック上の他の値から結果を区別するため、関数は(Cで)スタックに残す結果の数を返します。ここで重要な概念は、スタックがグローバル構造ではないということです。各関数は独自のパプライベートローカルスタックを持っています。LuaがC関数を呼び出すと、最初の引数は常にこのローカルスタックのインデックス1になります。C関数が同じ(または別の)C関数を再び呼び出すLuaコードを呼び出す場合でも、各呼び出しは自分自身のプライベートスタックのみを見て、最初の引数はインデックス1にあります。
著作権 © 2003–2004 Roberto Ierusalimschy. 全著作権所有。 | ![]() |