在C/C++中调用LUA脚本简介

本文介绍了如何在C/C++程序中调用LUA脚本,强调了LUA作为解释型语言的灵活性。通过注册C++接口供LUA脚本调用,展示了如何在C++中执行LUA脚本并处理参数传递。示例代码演示了如何从lua_State结构体中获取LUA脚本参数以及如何向LUA脚本返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

LUA脚本是一种可以嵌入C/C++模块的解释型语言,解释性语言与C/C++之类的编译型语言比较优点在于它无需重新编译即可生效,在处理得当的情况下甚至不需要停下程序。LUA只内置了一个功能简单的库,其他功能都需要宿主程序提供接口。

使用例子

C/C++模块(宿主程序)

工作线程

bool initLuaScript();
bool runLuaScript();

DWORD WINAPI MyMainWorkThread(LPVOID lpParam){
	initLuaScript();
	while (1){
		if (!g_bThreadEnable){
			ResetEvent(g_hEventRun);
			m_GameCall.GoToTradePos();
		}
		WaitForSingleObject(g_hEventRun,INFINITE);
		Sleep(2000);
		//在这里添加主逻辑代码。
		gs_DebugModel = false;
		gs_petNameVec.clear();
		gs_ptInEye.x = 0;
		gs_ptInEye.y = 0;
		gs_ptOutEye.x = 0;
		gs_ptOutEye.y = 0;
		if(0 == runLuaScript()){
			MessageBoxW(NULL,L"载入命令失败了。",NULL,MB_OK);
			Sleep(1000);
			continue;
		}
	}
}

初始化脚本和运行脚本

这段代码注册给LUA开放的接口,当LUA脚本执行时调用对应的函数。注册完后,如果LUA脚本执行“寻路到”函数将调用Lua_FindPathMoveTo这个C++接口,并将参数传递给 它。运行脚本只是简单调用了luaC库的luaL_dofile,这个函数将读入文件内容并且执行其中的脚本。当然如果你不想把这些内容暴露出来可以加密这些LUA脚本文件然后把文件载入后解密再使用lua库的lua_dostring/lua_pcall接口,这里就不再详述。

bool initLuaScript(){
	L=lua_open();//初始化指针
	lua_register(L,"设置捡血",Lua_SetIsPickXueBao);
	lua_register(L,"走路到",Lua_MoveTo);
	lua_register(L,"延时",Lua_sleep);
	lua_register(L,"进入地图",Lua_EnterMap);
	lua_register(L,"复活",Lua_DeadRelive);
	lua_register(L,"离开地图",Lua_LeaveMap);
	lua_register(L,"合体宝宝",Lua_CallPetsBattle);
	lua_register(L,"解体宝宝",Lua_RecallPets);
	lua_register(L,"拾取物品",Lua_PickUpfuben);
	lua_register(L,"飞回城里",Lua_FlyToCity);
	lua_register(L,"飞到门口",Lua_FlayToDoorNear);
	lua_register(L,"修理装备",Lua_RepairXianglianAndWeapon);
	lua_register(L,"寻路到",Lua_FindPathMoveTo);
	lua_register(L,"等待死亡",Lua_WaitForDead);
	lua_register(L,"技能1",Lua_MagicAttackSkill1);
	lua_register(L,"技能_BOSS",Lua_FengZhuKillBoss);
	lua_register(L,"技能2_按类型_距离",Lua_MagicAttackBaoLeiWithMonsterTypeFarThanDis);
	lua_register(L,"技能2_按类型_小于等于距离",Lua_MagicAttackBaoLeiWithMonsterTypeNotFarThanDis);
	l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值