2011-10-26 4 views
3

でLuaのクラスを登録します。私のCコードは、で構成されて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; 
} 

ソリューションを構築した後、例えば、「印刷(game.Workspace())」「ゲーム」のも、私かかわらず、ゼロであることを返します。それを登録しました。どんな解決策ですか?私は完全に固執しています...私はlgamelib.cをどこかに入れる必要があると信じていますが、私は私が必要と信じていません。

+4

"LUA_GAMELIBNAME"の定義は表示されませんでした。あなたはこれが「ゲーム」であると訴えていますか?また、実際に 'luaopen_game'を呼び出しましたか? –

答えて

1

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); 
関連する問題