0

指定したプレイヤーが死亡したときに実行されるコールバック関数があるとしましょう。

function OnPlayerDeath(playerid)

end

この関数を lua スクリプト内に配置せずに、Lua C モジュール内で呼び出す必要があります。

static int l_OnPlayerConnect (lua_State * L) {
  enum { lc_nformalargs = 1 };
  lua_settop(L,1);

  // so here I can use playerid argument - 1 arg

  return 0;
}

このコールバック引数を C で受け取ることは何とか可能ですか?

#define LUA extern "C" __declspec(dllexport) int __cdecl

LUA luaopen_mymodule(lua_State *L)
{
  /* function OnPlayerConnect( playerid )
   *    
   * end */
  lua_pushcfunction(L,l_OnPlayerConnect);
  lua_setfield(L,LUA_GLOBALSINDEX,"OnPlayerConnect"); //there's already OnPlayerConnect I just want to also call it here but I don't know how.
  assert(lua_gettop(L) - lc_nextra == 0);

  return 1;
}

この関数は既に存在するため、lua スタックにプッシュしたくありません。既存のLua関数にしたいだけです。

4

2 に答える 2

1

C API から Lua で実行する場合は、何らかの方法でスタックにプッシュする必要がありました。グローバルテーブルのどこかにすでに存在する場合は、lua_getglobal を呼び出してプッシュできます。lua_call (lua_pcall) では、呼び出しを行う前に、関数が呼び出され、その引数がスタックの一番上に存在する必要があります。

気が向いたらLuaJITのffiコールバック機能もチェックしてみますが、ただのLuaではありません。

于 2013-04-16T16:23:55.173 に答える
0

解決しました。できましたWB

解決策: C から loadstring を呼び出します。

于 2013-04-16T16:58:32.127 に答える