美文网首页
C#与Lua交互过程和原理

C#与Lua交互过程和原理

作者: 陷阱_5610 | 来源:发表于2020-09-10 11:34 被阅读0次

    C#与Lua交互过程:

     C# Call Lua :由C#文件先调用Lua解析器底层dll库(由C语言编写),再由dll文件执行相应的Lua文件;

      Lua Call C# :

    (1)、Wrap方式:首先生成C#源文件所对应的Wrap文件,由Lua文件调用Wrap文件,再由Wrap文件调用C#文件;

    (2)、反射方式:当索引系统API、dll库或者第三方库时,如果无法将代码的具体实现进行代码生成,可采用此方式实现交互。缺点:执行效率低。

    C#与Lua交互原理:

    C#与Lua进行交互主要通过虚拟栈实现,栈的索引分为正数与负数,若果索引为正数,则1表示栈底,若果索引为负数,则-1表示栈顶。

     C# Call Lua:由C#先将数据放入栈中,由lua去栈中获取数据,然后返回数据对应的值到栈顶,再由栈顶返回至C#。

      Lua Call C#:先生成C#源文件所对应的Wrap文件或者编写C#源文件所对应的c模块,然后将源文件内容通过Wrap文件或者C模块注册到Lua解释器中,然后由Lua去调用这个模块的函数。

    从代码文件方面解释:

    lua调用CSharp过程:

    lua->wrap->C#

    先生成Wrap文件(中间文件/适配文件),wrap文件把字段方法,注册到lua虚拟机中(解释器luajit),然后lua通过wrap就可以调C#了

    或者在config文件中添加相应类型也可以

    CSharp调用Lua过程:

    C#生成Bridge文件,Bridge调dll文件(dll是用C写的库),先调用lua中dll文件,由dll文件执行lua代码

    C#->Bridge->dll->Lua  OR   C#->dll->Lua

    从内存方面解释:说白了就是对栈进行操作

    C# Call Lua:C#把请求或数据放在栈顶,然后lua从栈顶取出该数据,在lua中做出相应处理(查询,改变),然后把处理结果放回栈顶,最后C#再从栈顶取出lua处理完的数据,完成交互。

    相关文章

      网友评论

          本文标题:C#与Lua交互过程和原理

          本文链接:https://www.haomeiwen.com/subject/prluxqtx.html