栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Unlua源码一:C++怎么通过getmodulename绑定lua脚本

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unlua源码一:C++怎么通过getmodulename绑定lua脚本

最近换了工作,有更多的时间可以扩充自己的知识库,不过我发现,看了很多代码和分析还是记不住,很多东西只是大概知道,一定要带着问题去看代码,才能真正有所收获~

这次我们就先来看下unlua中最基本的绑定脚本问题

在Github里的Unlua接口文档里我们可以找到,如果想把C++和对应的Lua脚本绑定起来,需要在C++类上继承IULuaInterface,并且需要重载对应的虚函数GetModuleName(),返回对应Lua脚本路径下的文件名。那我们肯定就要从这个函数入口。

在LuaContext.cpp里我们可以发现这么一个函数用到了GetModuleName。

看起来就是我们要找的函数,函数中的其他分支逻辑我们先暂时不管,继续往下跟

通过UObject::ProcessEvent得到脚本文件名ModuleName,最终会调用UUnluaManeger::Bind这个函数里面的BindInternal这个函数,这个函数值得关注的有下面几个地方

这里是根据ModuleName找到的LuaModule注册到Lua全局的package.loaded域下面。然后在Unlua中记录UE类和LuaModule的对应关系。

接下来就是把这两者中重复的Function来做一次重载,这样在C++中声明了的函数,就可以直接转到Lua中实现完成调用。中间调用步骤比较简单,我们就省略了,直接跳到OverrideUFunction这个函数是怎么做的。

 

OverrideUFunction这个函数可以看到就是把UFunction 的Native函数指针设置成了FLuaInvoker::execCallLua,然后给Function的Script加了一些标记枚举。关键就在FLuaInvoker::execCallLua,这个函数才是真正执行C++调用lua的地方。

 最终逻辑会执行到CallLuaInternal

 GetValueInternal这个函数会把对应的UProperty push到堆栈上,在PropertyDesc.cpp里实现了各种UProperty的GetValueInternal。,如下图所示: 

可以看下Bool的最简单的实现 

 

 
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号