gpt4 book ai didi

c - 在C中注册Lua类

转载 作者:行者123 更新时间:2023-12-02 04:05:26 24 4
gpt4 key购买 nike

我的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,但我不相信我需要这样做。

最佳答案

在我使用的Lua版本(带有lua5.1.1的LuaInterface)中,我必须向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);

关于c - 在C中注册Lua类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7898329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com