0

假设我有一个回调函数,它在指定玩家死亡时执行。

function OnPlayerDeath(playerid)

end

我希望在 Lua C 模块中调用此函数而不将其放入 lua 脚本中:

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 回答