4

Lua と C++ のインターフェースの基本を学ぼうとしていますが、問題が発生しました。文字列を返す関数を呼び出して、C++ 側で文字列を操作したいのですが、luaL_dostring が Lua スタックに何も置かないようです。

簡単なテストでさえ、正しく動作していないようです:

lua_State* lua = lua_open();
luaL_openlibs(lua);

//Test dostring.
luaL_dostring(lua, "return 'derp'");

int top = lua_gettop(lua);
cout << "stack top is " <<top << endl;

//Next, test pushstring.
lua_pushstring(lua, "derp");

top = lua_gettop(lua);
cout << "stack top is " << top << endl;

出力:

stack top is 0
stack top is 1

何か案は?

4

1 に答える 1

12

ああ、問題が見つかりました。このページによると、Lua 5.1 では luaL_dostring はリターンを無視します。私が持っていたコードは、おそらく Lua 5.2 で動作するでしょう。

機能を変更するには、次を使用する必要があります。

#undef luaL_dostring
#define luaL_dostring(L,s)  \
    (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))
于 2012-09-21T11:36:33.313 に答える