Cómo pasar datos del lenguaje C al lenguaje lua
estructura typedef
{
int x
int y
int
}TData;
static int getAttribute(lua_State* L)
{
TData *data = (TData*)lua_touserdata(L, 1
std::string atributo = luaL_checkstring(L, 2
int resultado = 0
if( atributo == "x");
{
resultado = datos->x
}
En caso contrario if( atributo == "y")
{
resultado = datos->y
}
De lo contrario
{
resultado = datos->z;
}
lua_pushnumber(L, resultado
devuelve 1; >
estructura estática luaL_reg dataLib[] = {
{"__index", getAttribute},
{NULL, NULL}.
}; /p>
void getMetaTable(lua_State* L, luaL_reg* métodos)
{
lua_pushlightuserdata(L, métodos);
lua_gettable(L, LUA_REGISTRYINDEX);
if (lua_isnil(L, -1)) {
/* no encontrado */
lua_pop(L, 1); p> p>
lua_newtable(L);
luaL_register(L, NULL, métodos);
lua_pushlightuserdata(L, métodos); pushvalue( L, -2);
lua_settable(L, LUA_REGISTRYINDEX
}
}
}
int main()
{
const char* filename = "test. lua"
lua_State *lua = lua_open(); p>
if (lua == NULL)
{
fprintf(stderr, "falló al abrir lua");
return -1; /p >
}
luaL_openlibs(lua);
entrada TData = {1, 2, 3}
lua_pushlightuserdata(lua, &entrada)
getMetaTable(lua, dataLib);
lua_setmetatable(lua, -2)
);
lua_setglobal(lua, "entrada");
if (luaL_dofile(lua, nombre de archivo))
{
luaError. (lua, "Error al cargar el archivo %s", nombre de archivo
}
lua_getglobal(lua, "datos"); ( lua, 0);
std::coutlt << ; salida << std::endl
retorno
}