LuaはC言語に組み込みやすい言語。
Windows版をmakeするのは面倒なので、ビルド済みバイナリをダウンロードする。
以下URLへ行き、Historyから Release 1とついているものをダウンロードする。
https://luabinaries.sourceforge.net
#include <lua.hpp> // lua54.dllが必要 #pragma comment(lib, "lua54.lib") int main() { lua_State* luas = luaL_newstate(); // Luaの標準ライブラリを読み込む luaL_openlibs(luas);
// Luaスクリプト const char* script = R"(
for i = 1,5 do print(i) end
)"; // 文字列で与えてスクリプトを実行する luaL_dostring(luas, script); // Luaの終了。全てのメモリ解放 lua_close(luas); }
for i = 1,5 do print(i) end
#include <iostream> #include <lua.hpp> // lua54.dllが必要 #pragma comment(lib, "lua54.lib") int main() { lua_State* luas = luaL_newstate(); // Luaの標準ライブラリを読み込む luaL_openlibs(luas); // myscript.luaを実行する // luaL_dofileでもいい。luaL_dofileはマクロ。 // luaL_dofile(luas, "myscript.lua"); luaL_loadfile(luas, "myscript.lua");// スクリプトファイル読み込み lua_pcall(luas, 0, LUA_MULTRET, 0);// スクリプト実行 // Luaの終了。全てのメモリ解放 lua_close(luas); }
#include <lua.hpp> // lua54.dllが必要 #pragma comment(lib, "lua54.lib") int main() { lua_State* luas = luaL_newstate(); // Luaの標準ライブラリを読み込む luaL_openlibs(luas); luaL_dostring(luas, R"(
function calc(x, y) return x + y, x - y, x * y, x / y end
)" ); // Luaの関数を呼び出す // 引数はスタックにプッシュして渡す ///////////////////////////////////////////// lua_getglobal(luas, "calc"); // add 関数をスタックにプッシュ lua_pushnumber(luas, 3); // 第一引数 x に 3 をプッシュ lua_pushnumber(luas, 7); // 第二引数 y に 7 をプッシュ ///////////////////////////////////////////// // 関数呼び出し int ret = lua_pcall( luas, 2, // 引数の数 4, // 戻り値の数 0 // エラーハンドラのインデックス ); ///////////////////////////////////////////// // エラーチェック if (ret != LUA_OK) { const char* err = lua_tostring(luas, -1); printf("error: %s\n", err); return -1; } ///////////////////////////////////////////// // 戻り値を取得 int add = (int)lua_tonumber(luas, -4);// 戻り値1 int sub = (int)lua_tonumber(luas, -3);// 戻り値2 double mul = (double)lua_tonumber(luas, -2);// 戻り値3 double div = (double)lua_tonumber(luas, -1);// 戻り値4 printf("add = %d\n", add); printf("sub = %d\n", sub); printf("mul = %f\n", mul); printf("div = %f\n", div); ///////////////////////////////////////////// // Luaの終了。全てのメモリ解放 lua_close(luas); }
#include <lua.hpp> // lua54.dllが必要 #pragma comment(lib, "lua54.lib")
int ccalc(lua_State* L) { double a = luaL_checknumber(L, 1); // 1番目の引数を取得 double b = luaL_checknumber(L, 2); // 2番目の引数を取得 // 結果をスタックにプッシュ lua_pushnumber(L, a + b); lua_pushnumber(L, a - b); lua_pushnumber(L, a * b); lua_pushnumber(L, a / b); return 4; // 戻り値の数を返す }
int main() { lua_State* luas = luaL_newstate(); // Luaの標準ライブラリを読み込む luaL_openlibs(luas); // C++の関数をLuaに登録 lua_register(luas, "ccalc", ccalc); // LuaからC++の関数を呼び出す luaL_dostring(luas, R"(
add,sub,mul,div = ccalc(3, 7) print("add",add) print("sub",sub) print("sub",mul) print("div",div)
)" ); // Luaの終了。全てのメモリ解放 lua_close(luas); }