我一直在寻找有关如何使用API在Lua中共享C++对象的教程。大多数教程只显示如何导出类。
我想从非常简单的开始,以这样的方式公开一个变量(例如
有人知道任何好的教程可以向我展示如何做到这一点吗?
我想从非常简单的开始,以这样的方式公开一个变量(例如
int myVar = 5
),以便在Lua中进行更改会反映在C++应用程序中。有人知道任何好的教程可以向我展示如何做到这一点吗?
print(cside.myVar) -- 5
以下是使用Lua API实现此操作的示例代码。虽然有些单调乏味,但很简单。您可以编写自己的代码生成器或使用类似于swig或tolua ++的工具。
/* gcc -o simple simple.c -llua -lm -ldl */
#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"
int myVar = 5;
int l_set( lua_State *L )
{
const char *key = luaL_checkstring(L, 2);
int val = luaL_checkint(L, 3);
if (strcmp(key, "myVar") == 0)
myVar = val;
}
int l_get( lua_State *L )
{
const char *key = luaL_checkstring(L, 2);
if (strcmp(key, "myVar") == 0)
{
lua_pushinteger(L, myVar);
return 1;
}
}
int main(int argc, char *argv[])
{
const struct luaL_Reg somemt[] =
{
{ "__index", l_get },
{ "__newindex", l_set },
{ NULL, NULL }
};
lua_State *L = luaL_newstate();
luaL_openlibs( L );
lua_newuserdata(L, sizeof(void *));
luaL_newmetatable(L, "somemt");
luaL_register( L, NULL, somemt );
lua_setmetatable(L, -2);
lua_setglobal(L, "cside");
luaL_dostring(L, "print('from Lua:', cside.myVar)");
luaL_dostring(L, "cside.myVar = 200");
printf( "from C: myVar = %d\n", myVar );
}
scene.objects [5] .material.diffuseColor.red
这样的数据? - Tom Savage