0
我如下所述的在全球Hooks
表中的一些Lua函數:調用Lua函數從全局表在C++
print("Loading Hook System")
local pairs = pairs;
Hooks = {}
Hooks.Hooks = {}
----------
-- This file defines all the available hooks
----------
Hooks.Hooks.OnScoreboardOpen = {}
function Hooks.Add(Name, Identifier, Function)
if (Hooks.Hooks[Name] == nil) then
print("Hook "..Name.." Does Not Exist")
else
if (Hooks.Hooks[Name][Identifier] == nil) then
Hooks.Hooks[Name][Identifier] = Function
else
print("Hooks.Add Error: Identifier: "..Identifier.." Already Exists")
end
end
end
function Hooks.Remove(Identifier)
for _,Hook in pairs(Hooks.Hooks) do
if (Hook[Identifier]) then
Hook[Identifier] = nil
end
end
end
function Hooks.Call(Name, ...)
local arg = {...}
for _,v in pairs(Hooks.Hooks[Name]) do
v(unpack(arg))
end
end
print("Complete")
然後,用戶可以添加自己的功能與唯一標識符鉤系統然後取出他們如果需要。
我需要弄清楚如何在C++中調用Hooks.Call()
函數,但我只知道如何調用全局函數,而不是在全局範圍內的表中調用函數。一種方法來完成Hooks.Call()
完全用C++完成的工作將是最有效的路線。
這讓我打電話從C++
lua_getglobal(m_Lua, "Hooks");
lua_getfield(m_Lua, -1, "Call");
lua_pushstring(m_Lua, "OnScoreboardOpen");
lua_pushnumber(m_Lua, 5);
lua_pushnumber(m_Lua, 7);
int Error = lua_pcall(m_Lua, 3, 0, 0);
if (Error)
{
std::cout << lua_tostring(m_Lua, -1) << std::endl;
}
這段代碼完成的Lua功能?在這一點上,堆棧是否清晰?
您可以從'Hooks'表中獲得'Call'函數,就像您從表中獲取其他值一樣。 –