3

Luaを新しいプログラミング言語Dで動作させようとしています。すべて正常に動作しますが(ライブラリ、lua52.dllなど)、luaL_getmetatableクラッシュします。元々、関数はdluaで定義されていませんでしたが、次のように追加しました。

    //C     #define luaL_getmetatable(L,n)  (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
    void luaL_getmetatable(lua_State* L, const(char)* s) {
        lua_getfield(L, LUA_REGISTRYINDEX, s);
    }

しかし、私が実行すると:

    L = lua_open();
    luaL_openlibs(L);
    // prevent script kiddies
    luaL_dostring(L, "os = nil; io = nil");
    // reprogram 'print'
    luaL_newmetatable(L, "vector");
    luaL_getmetatable(L, "vector"); // CRASH

クラッシュします。これがなぜであるかについて何か考えはありますか?

4

2 に答える 2

8

常に持っていたLuaDではなく、古代のdluaバインディングを使用しているようです。luaL_getmetatable

ただし、これらのバインディングとコードはどちらも、5.2ではなくLua5.1用です。正しいバージョンのLuaにリンクしていることを確認してください。lua_openLua 5.2にはありません(5.1では非推奨になりました)。

適切なライブラリにリンクした後に同じ問題が発生した場合は、マクロLUA_USE_APICHECKを設定してLuaをコンパイルし、何が問題だったかを正確に確認することをお勧めします。

于 2012-04-25T23:20:04.363 に答える
1

たぶん、D、LuaDの既存のLuaバインディングを確認する必要があります。

于 2012-04-25T13:30:27.250 に答える