0

lua 5.1に、c ++関数の1つを呼び出すだけの行を実行させようとして"Assail"います。なぜそれが機能しないのかわかりませんが、誰かが間違いを指摘できますか?

これはアサルト関数です:

static int Assail(lua_State *L)
{
    cout << "test" << endl;
    return 1;
}

私はdo_stringこのように電話しようとしています:

L = lua_open();
luaL_openlibs(L);
lua_register(L, "Assail", Assail);
luaL_dostring(L, "s = Assail()");   
lua_close(L);

どんな助けでも大歓迎です。

4

1 に答える 1

3

これをC++で記述しているため、名前マングリングが関数に適用されます。そのため、最終的な実行可能ファイル/ライブラリには、Luaが期待するものとは異なる特別な名前が付けられます。externこれは、キーワードを使用してCへのリンクを変更することで解決できます。

extern "C" int Assail(lua_State *L);

extern "C" int Assail(lua_State *L)
{
    // code here
}
于 2013-01-19T16:48:31.740 に答える