How to connect Lua and C++
Материал из Поле цифровой дидактики
Описание | C++ может вызывать функции Lua, а Lua может вызывать функции C++. Это позволяет вынести часть кода в скрипты и писать собственные функции, расширяющие функциональность программы. |
---|---|
Область знаний | Информатика |
Область использования (ISTE) | |
Возрастная категория | 14
|
Поясняющее видео | https://www.youtube.com/watch?v=kDHGfHxwymI |
Близкие рецепту понятия | |
Среды и средства для приготовления рецепта: | Lua, C++ |
Example 1
#include <lua.hpp>
int main() {
lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "script.lua");
lua_getglobal(L, "myFunction");
lua_pushnumber(L, 10);
lua_pushnumber(L, 20);
lua_call(L, 2, 1);
int result = lua_tonumber(L, -1);
lua_pop(L, 1);
lua_close(L);
return 0;
}
Example 2
#include <lua.hpp>
class MyClass {
public:
int x;
int y;
};
int main() {
lua_State* L = luaL_newstate();
luaL_openlibs(L);
MyClass* obj = new MyClass();
obj->x = 10;
obj->y = 20;
lua_pushlightuserdata(L, obj);
lua_setglobal(L, "myObject");
luaL_dofile(L, "script.lua");
lua_close(L);
return 0;
}
Example 3 Registering C++ functions for Lua code to cal
#include <lua.hpp>
int myFunction(lua_State* L) {
int x = lua_tonumber(L, 1);
int y = lua_tonumber(L, 2);
int result = x + y;
lua_pushnumber(L, result);
return 1;
}
int main() {
lua_State* L = luaL_newstate();
luaL_openlibs(L);
lua_pushcfunction(L, myFunction);
lua_setglobal(L, "myFunction");
luaL_dofile(L, "script.lua");
lua_close(L);
return 0;
}
Example 4 Using Lua to configure C++ objects:
#include <lua.hpp>
class MyClass {
public:
int x;
int y;
};
int main() {
lua_State* L = luaL_newstate();
luaL_openlibs(L);
MyClass* obj = new MyClass();
obj->x = 10;
obj->y = 20;
lua_newtable(L);
lua_pushnumber(L, obj->x);
lua_setfield(L, -2, "x");
lua_pushnumber(L, obj->y);
lua_setfield(L, -2, "y");
lua_setglobal(L, "myObject");
luaL_dofile(L, "script.lua");
obj->x = lua_tonumber(L, -2);
obj->y = lua_tonumber(L, -1);
lua_close(L);
return 0;
}