在C中注册Lua类

时间:2011-10-26 03:09:35

标签: c lua

我的C代码包括:

/*
** lgamelib.c
** Game Library
** See Copyright Notice in lua.h
*/


#include <stdlib.h>
#include <math.h>

#define lgamelib_c
#define LUA_LIB

#include "lua.h"

#include "lauxlib.h"
#include "lualib.h"

static int game_workspace (lua_State *L) {
  lua_pushstring(L, "Workspace");
  return 1;
}

static int game_sound (lua_State *L) {

  return 1;
}


static const luaL_Reg gamelib[] = {
  {"Workspace", game_workspace},
  {"Sound",  game_sound},
  {NULL, NULL}
};


/*
** Open game library
*/
LUALIB_API int luaopen_game (lua_State *L) {
  luaL_register(L, LUA_GAMELIBNAME, gamelib);
  //lua_pushnumber(L, PI);
  //lua_setfield(L, -2, "pi");
  //lua_pushnumber(L, HUGE_VAL);
  //lua_setfield(L, -2, "huge");
  return 1;
}

在构建解决方案之后,例如,'print(game.Workspace())'返回'游戏'是零,即使我已经注册了它。有解决方案吗我完全陷入困境......我相信我需要在某处包含lgamelib.c但我不相信我需要。

1 个答案:

答案 0 :(得分:1)

在我正在使用的Lua版本(LuaInterface和lua5.1.1)中,我必须在linit.c中向lualibs[]数组添加新库。此数组由luaL_openlibs函数调用,然后调用luaopen_game函数或您要添加的库。我不知道这是否是添加库的“正确”方法,但它适用于我的代码。

编辑:在考虑之后,您不需要任何修改linit.c文件。创建lua状态后,可以手动调用库加载器。

lua_State  *L = lua_open();
lua_pushcfunction(L, luaopen_game);
lua_pushstring(L, "game");
lua_call(L, 1, 0);