如何处理c++与lua交互回调函数
admin
2023-02-11 21:40:05
0

1、在头文件中定义注册回调函数,定义在MyClass类中

void register(unsigned short cmdID, LUA_FUNCTION func);//LUA_FUNCTION其实就是一个int
void unregister();

2、实现

void MyClass::register(unsigned short cmdID, LUA_FUNCTION func)
{
m_luaFunction = func;
//回调lua中注册的函数(实际应用中执行回调应该是在满足某种条件下执行)
LuaStack* stack = LuaEngine::getInstance()->getLuaStack();
stack->pushInt(cmdID);
stack->executeFunctionByHandler(func, 1);//1代表参数个数
}
void MyClass::unregister()
{
LuaEngine::getInstance()->removeScriptHandler(m_luaFunction); //移除lua函数的绑定
}

3、用tolua++把c++代码生成在lua使用的接口

要对MyClass_tolua.cpp修改如下

1、包含头文件

#include "tolua_fix.h"

2、搜索register,由于tolua++把LUA_FUNCTION认为是一个类型,所以要对这段做一下修改

(1)将

!tolua_isusertype(tolua_S,2,"LUA_FUNCTION",0,&tolua_err))

改成

!lua_isfunction(tolua_S,2))

(2)将

LUA_FUNCTION callback = *((LUA_FUNCTION*)  tolua_tousertype(tolua_S,3,0));

改成

int callback = toluafix_ref_function(tolua_S, 3, 0);

4、lua文件中注册回调函数

local function operateResult(cmdID)
cclog("%d", cmdID)
end

local Demo:onEnter()
local myclass = MyClass:new()
myclass:register(101,operateResult)
end

相关内容

热门资讯

斯里兰卡前高官之子,涉嫌抢劫中... 斯里兰卡警方近期披露,当地破获一起抢劫案,涉案人员5人,涉案金额高达2000万卢比(约合人民币40余...
每日科普 | 量子包治百病?什... 市面上量子手环、量子水杯、量子床垫、量子理疗仪等产品满天飞,商家张口就宣称量子能量可以疏通经络、根除...
上海AI产业交答卷:以生态之力... 上海人工智能产业交答卷:真实产线上淬炼硬核能力 聚合产业推进中国算力体系化 以生态之力,加速AI拐点...
“郑州造”光伏清洁机器人即将交... 7月22日,郑州航空港经济综合实验区坤达产业园内,两台C1光伏清洁机器人正在进行交付前的最后测试。作...
腾讯整合Workbuddy与Q... 快科技7月21日消息 ,据媒体报道,腾讯近日发布内部组织调整通知,将 QClaw产品中心全部相关业务...
TVB正式更名,宣布由传统电视... 7月24日,@TVB官方微博发文官宣TVB更名“无线集团”,TVB表示,由传统电视台升级为跨媒体娱乐...
2026WAIC观察丨白辰甲:... 图片来源/新华社 ■中国经济时报记者 张一鸣 王彩娜 在人工智能浪潮下,具身智能的演变之路也在加速。...
澳大利亚工党大会上,中方官员愤... 据澳大利亚广播公司(ABC)7月23日报道,中国外交官因不满台湾地区代表出席澳大利亚工党(ALP)在...
裸体在家犯法还是拍别人裸照犯法... 近日,#男子在家裸体被邻居拍照发群#一事引发热议。据报道,某小区一名男业主在家中未穿衣物,对面女业主...
“每天跟遛狗一样”,万亿资金,... 进入7月,市场波动加大,A股关于量化交易的争议再次达到顶峰。由于散户与量化机构之间的“体感温差”显著...