本文整理汇总了C++中pushFunctionByHandler函数的典型用法代码示例。如果您正苦于以下问题:C++ pushFunctionByHandler函数的具体用法?C++ pushFunctionByHandler怎么用?C++ pushFunctionByHandler使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pushFunctionByHandler函数的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: executeFunctionByHandler
int CCLuaEngine::executeFunctionByHandler(LUA_HANDLE nHandler, int numArgs)
{
if (pushFunctionByHandler(nHandler)) /* stack: ... arg1 arg2 ... func */
{
if (numArgs > 0)
{
lua_insert(m_state, -(numArgs + 1)); /* stack: ... func arg1 arg2 ... */
}
int traceback = 0;
lua_getglobal(m_state, "__G__TRACKBACK__"); /* stack: ... func arg1 arg2 ... G */
if (!lua_isfunction(m_state, -1))
{
lua_pop(m_state, 1); /* stack: ... func arg1 arg2 ... */
}
else
{
traceback = -(numArgs + 2);
lua_insert(m_state, traceback); /* stack: ... G func arg1 arg2 ... */
}
int error = 0;
error = lua_pcall(m_state, numArgs, 1, traceback); /* stack: ... ret */
if (error)
{
if (traceback == 0)
{
CCLOG("[LUA ERROR] %s", lua_tostring(m_state, - 1)); /* stack: ... error */
lua_pop(m_state, 1); // remove error message from stack
}
return 0;
}
// get return value
int ret = 0;
if (lua_isnumber(m_state, -1))
{
ret = lua_tointeger(m_state, -1);
}
else if (lua_isboolean(m_state, -1))
{
ret = lua_toboolean(m_state, -1);
}
lua_pop(m_state, 1); // remove return value from stack
return ret;
}
else
{
lua_pop(m_state, numArgs); // remove args from stack
return 0;
}
}
开发者ID:oopenoo,项目名称:cocos2d-x,代码行数:53,代码来源:CCLuaEngine.cpp
示例2: executeFunctionByHandler
int CCLuaEngine::executeFunctionByHandler(LUA_HANDLE nHandler, int numArgs)
{
if (pushFunctionByHandler(nHandler))
{
if (numArgs > 0)
{
lua_insert(m_state, -(numArgs + 1)); /* stack: ... func arg1 arg2 ... */
}
int error = 0;
// try
// {
error = lua_pcall(m_state, numArgs, 1, 0); /* stack: ... ret */
// }
// catch (exception& e)
// {
// CCLOG("[LUA ERROR] lua_pcall(%d) catch C++ exception: %s", nHandler, e.what());
// lua_settop(m_state, 0);
// return 0;
// }
// catch (...)
// {
// CCLOG("[LUA ERROR] lua_pcall(%d) catch C++ unknown exception.", nHandler);
// lua_settop(m_state, 0);
// return 0;
// }
if (error)
{
CCLOG("[LUA ERROR] %s", lua_tostring(m_state, - 1)); /* stack: ... error */
lua_pop(m_state, 1); // remove error message from stack
return 0;
}
// get return value
int ret = 0;
if (lua_isnumber(m_state, -1))
{
ret = lua_tointeger(m_state, -1);
}
else if (lua_isboolean(m_state, -1))
{
ret = lua_toboolean(m_state, -1);
}
lua_pop(m_state, 1); // remove return value from stack
return ret;
}
else
{
lua_pop(m_state, numArgs); // remove args from stack
return 0;
}
}
开发者ID:4apogeu,项目名称:cocos2d-x,代码行数:53,代码来源:CCLuaEngine.cpp
示例3: executeFunctionByHandler
int LuaStack::executeFunctionByHandler(int nHandler, int numArgs)
{
int ret = 0;
if (pushFunctionByHandler(nHandler)) /* L: ... arg1 arg2 ... func */
{
if (numArgs > 0)
{
lua_insert(_state, -(numArgs + 1)); /* L: ... func arg1 arg2 ... */
}
ret = executeFunction(numArgs);
}
lua_settop(_state, 0);
return ret;
}
开发者ID:Ben-Cortina,项目名称:GameBox,代码行数:14,代码来源:CCLuaStack.cpp
示例4: executeFunctionByHandler
int CCLuaStack::executeFunctionByHandler(int nHandler, int numArgs)
{
if (pushFunctionByHandler(nHandler)) /* L: ... arg1 arg2 ... func */
{
if (numArgs > 0)
{
lua_insert(m_state, -(numArgs + 1)); /* L: ... func arg1 arg2 ... */
}
return executeFunction(numArgs);
}
lua_pop(m_state, numArgs); // remove args from stack
return 0;
}
开发者ID:524777134,项目名称:cocos2d-x,代码行数:14,代码来源:CCLuaStack.cpp
示例5: executeFunctionByHandler
int CCLuaStack::executeFunctionByHandler(int nHandler, int numArgs, CCObject* collector, SEL_ScriptReturnedValueCollector sel)
{
int ret = 0;
if (pushFunctionByHandler(nHandler)) /* L: ... arg1 arg2 ... func */
{
if (numArgs > 0)
{
lua_insert(m_state, -(numArgs + 1)); /* L: ... func arg1 arg2 ... */
}
ret = executeFunction(numArgs, collector, sel);
}
lua_settop(m_state, 0);
return ret;
}
开发者ID:stanhome,项目名称:cocos2dx-classical,代码行数:14,代码来源:CCLuaStack.cpp
示例6: reallocateScriptHandler
int LuaStack::reallocateScriptHandler(int nHandler)
{
LUA_FUNCTION nNewHandle = -1;
if (pushFunctionByHandler(nHandler))
{
nNewHandle = toluafix_ref_function(_state,lua_gettop(_state),0);
}
/*
toluafix_get_function_by_refid(_state,nNewHandle);
if (!lua_isfunction(_state, -1))
{
CCLOG("Error!");
}
lua_settop(_state, 0);
*/
return nNewHandle;
}
开发者ID:Ben-Cortina,项目名称:GameBox,代码行数:19,代码来源:CCLuaStack.cpp
示例7: executeFunction
int LuaStack::executeFunction(int handler, int numArgs, int numResults, const std::function<void(lua_State*,int)>& func)
{
if (pushFunctionByHandler(handler)) /* L: ... arg1 arg2 ... func */
{
if (numArgs > 0)
{
lua_insert(_state, -(numArgs + 1)); /* L: ... func arg1 arg2 ... */
}
int functionIndex = -(numArgs + 1);
if (!lua_isfunction(_state, functionIndex))
{
CCLOG("value at stack [%d] is not function", functionIndex);
lua_pop(_state, numArgs + 1); // remove function and arguments
return 0;
}
int traceCallback = 0;
lua_getglobal(_state, "__G__TRACKBACK__"); /* L: ... func arg1 arg2 ... G */
if (!lua_isfunction(_state, -1))
{
lua_pop(_state, 1); /* L: ... func arg1 arg2 ... */
}
else
{
lua_insert(_state, functionIndex - 1); /* L: ... G func arg1 arg2 ... */
traceCallback = functionIndex - 1;
}
int error = 0;
++_callFromLua;
error = lua_pcall(_state, numArgs, numResults, traceCallback); /* L: ... [G] ret1 ret2 ... retResults*/
--_callFromLua;
if (error)
{
if (traceCallback == 0)
{
CCLOG("[LUA ERROR] %s", lua_tostring(_state, - 1)); /* L: ... error */
lua_pop(_state, 1); // remove error message from stack
}
else /* L: ... G error */
{
lua_pop(_state, 2); // remove __G__TRACKBACK__ and error message from stack
}
return 0;
}
// get return value,don't pass LUA_MULTRET to numResults,
do {
if (numResults <= 0 || nullptr == func)
break;
func(_state, numResults);
} while (0);
if (traceCallback)
{
lua_pop(_state, 1); // remove __G__TRACKBACK__ from stack /* L: ... */
}
}
return 1;
}
开发者ID:abelHan,项目名称:DontCrash,代码行数:67,代码来源:CCLuaStack.cpp
示例8: lua_gettop
int LuaStack::executeFunctionReturnArray(int handler,int numArgs,int numResults,__Array& resultArray)
{
int top = lua_gettop(_state);
if (pushFunctionByHandler(handler)) /* L: ... arg1 arg2 ... func */
{
if (numArgs > 0)
{
lua_insert(_state, -(numArgs + 1)); /* L: ... func arg1 arg2 ... */
}
int functionIndex = -(numArgs + 1);
if (!lua_isfunction(_state, functionIndex))
{
CCLOG("value at stack [%d] is not function", functionIndex);
lua_pop(_state, numArgs + 1); // remove function and arguments
lua_settop(_state,top);
return 0;
}
int traceback = 0;
lua_getglobal(_state, "__G__TRACKBACK__"); /* L: ... func arg1 arg2 ... G */
if (!lua_isfunction(_state, -1))
{
lua_pop(_state, 1); /* L: ... func arg1 arg2 ... */
}
else
{
lua_insert(_state, functionIndex - 1); /* L: ... G func arg1 arg2 ... */
traceback = functionIndex - 1;
}
int error = 0;
++_callFromLua;
error = lua_pcall(_state, numArgs, numResults, traceback); /* L: ... [G] ret1 ret2 ... retResults*/
--_callFromLua;
if (error)
{
if (traceback == 0)
{
CCLOG("[LUA ERROR] %s", lua_tostring(_state, - 1)); /* L: ... error */
lua_pop(_state, 1); // remove error message from stack
}
else /* L: ... G error */
{
lua_pop(_state, 2); // remove __G__TRACKBACK__ and error message from stack
}
lua_settop(_state,top);
return 0;
}
// get return value,don't pass LUA_MULTRET to numResults,
if (numResults <= 0)
{
lua_settop(_state,top);
return 0;
}
for (int i = 0 ; i < numResults; i++)
{
if (lua_type(_state, -1) == LUA_TBOOLEAN) {
bool value = lua_toboolean(_state, -1);
resultArray.addObject(Bool::create(value)) ;
}else if (lua_type(_state, -1) == LUA_TNUMBER) {
double value = lua_tonumber(_state, -1);
resultArray.addObject(Double::create(value));
}else if (lua_type(_state, -1) == LUA_TSTRING) {
const char* value = lua_tostring(_state, -1);
resultArray.addObject(String::create(value));
}else{
resultArray.addObject(static_cast<Ref*>(tolua_tousertype(_state, -1, NULL)));
}
// remove return value from stack
lua_pop(_state, 1); /* L: ... [G] ret1 ret2 ... ret*/
}
/* L: ... [G]*/
if (traceback)
{
lua_pop(_state, 1); // remove __G__TRACKBACK__ from stack /* L: ... */
}
}
lua_settop(_state,top);
return 1;
}
开发者ID:abelHan,项目名称:DontCrash,代码行数:90,代码来源:CCLuaStack.cpp
注:本文中的pushFunctionByHandler函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论