我的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但我不相信我需要。
答案 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);