c#导入类到lua

lua与c交互遵循的主要思想是,c你需要什么东西,你给我lua说,我帮你生成,你只能用我给你的api来操作这些lua对象,这些api采用了一个栈结构作为和lua交互的存储结构,以约定的方式把参数放入lua栈,以此达成函数调用

因此lua能非常安全的处理在c中生成的对象。

一、lua与c的交互

lua提供了lua_newuserdata的接口可直接将一个c结构传入到lua中,由lua来管理这个对象,该对象没有被引用后,会被lua的垃圾回收自动回收,在回收时会调用__gc方法

二、lua与c#的交互

1、导入类方法到lua

c#也是个托管语言,并且lua并没有给出c#中传入lua_newuserdata的方法。因此c#与lua如何交互呢,参考了项目代码,整理了一下思路,写到这里

比如C#中有个类叫GameObject,继承与Object

那么一个GameObject对象,比如go

go.name 这句代码我们希望他能先到GameObject中去找name属性,再到Object中找name属性。可设计如下图的结构

其中,GameObject为全局表,mtGameObject也是全局表,并且表里包含了C#类GameObject中的所有方法

mtpObject也是一个全局表,其__index指向mtObject(包含C#类Object中的所有方法)



2、传入userdate到lua

有了1中的GameObject全局表,当要传入一个GameObject对象到lua中时

*使用lua_newuserdata方法生成一个size为1的假的userdata对象,并将该userdata的元表设置为GameObject,lua_newuserdata函数返回一个c++结构的对象,在c#中可用IntPtr类型来保存

*以IntPty.ToInt64函数,将返回的userdata转为一个64位数字,以该数字为key,以实际对象为value,保存在c#中的一个字典中

*当lua调用该userdata的方法时,在c#中取出userdat,转为64位的key从对象字典中取出实际对象即可

通过以上方式,即可实现将一个c#对象传入lua中


文笔拙劣,思想肤浅,不足之处欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值