LuaでC++の関数を呼び出す例
2022-01-09 19:08:14
LuaはもちろんC言語で定義された関数を呼び出すこともできます。平均化の例を説明します。
以下に示すC++の関数average()は、複数の引数を受け取り、複数の値を返す方法を示しています。
1. lua_gettop関数は、スタックの先頭のインデックス値を返します。Lua ではスタックの番号は 1 から始まるので、この関数で得られる値は引数の数だけあることになります。
2. forループ内の全引数の合計を計算する。
3. lua_pushnumber()を呼び出し、引数の平均値をスタックします。
4. 最後に、この関数は 1 を返し、スタックに戻り値があることを示します。
C++の関数が定義されたので、それをLuaインタープリタに伝える必要があります。これは、Luaインタープリタが初期化され、ロードされたライブラリが関数の登録を完了した後、main関数内で行います。
コピーコード
コードは以下の通りです。
lua_register(L, "avg", average); //the second argument is the name of the function called in Lua
C++側です。
#include "stdafx.h"
#include <stdio.h>
extern "C" { //if you don't use extern you will get a link error and compile to a C++ file
#include <lua.h>
#include <lualib.h>
#include <luxlib.h>
}
int average(lua_State *L){
int n= lua_gettop(L);
int i;
double sum=0;
for(i=0;i<n;i++){
sum+=lua_tonumber(L,-1);
lua_pop(L,1);
}
lua_pushnumber(L,sum/n);
if(!lua_isnumber(L,-1))
luaL_error(L,"push error!\n");
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
lua_State* L = lua_open();
luaL_openlibs(L); // methods added by the new version of the library
lua_register(L,"avg",average);
luaL_dofile(L,"cof.lua");
getchar();
return 0;
}
Luaファイルです。
コピーコード
コードは以下の通りです。
print("avg is ",avg(1,2,3,4,5,6,7,8))
平均値を求めるプログラムを実行します
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン