C#和lua相互调用的方法教程

2019-12-30 18:53:03于海丽

color: #ff0000">前言

自从ulua在官网上出来后,lua 就被u3d开发人员喜爱。国内有几个高手把lua拿过来 接着进行了封装。很多都是新手转过来。lua语法一看遍知,但是大多数人还是不明白两个语言之间的互相调用是怎么一回事,这也是难点和重点。所以今天想跟大家分享一下这方面的知识,让大家少走弯路吧。

Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库。LuaInterface则用于实现Lua和CLR的混合编程。

C与lua交互面临以下几个问题:

1、由于lua里面的数据都是动态加载的所以内存也是动态分配的,也没有static 这样的修饰,而C里面有 static const 这样的静态类型数据

2、c里面是手动管理内存lua 里面是自动管理内存

所以为了解决这些问题就采用了一个抽象栈来让lua与c交换值,好比c里面的 void*  可以指向任何地址而不用管存储类型。这样两边都不管你传的何种类型的参数,只用知道它是一个地址指针。两边用的时候再强制转换成对应的类型。

下面开始本文的正文吧。

(一)C#调用Lua

测试环境:在VS2015中建一个C#控制台应用程序,并添加LuaInterface.dll的引用

LuaInterface下载地址:http://www.easck.com/p>

LuaInterface.Lua类是CLR访问Lua解释器的主要接口,一个LuaInterface.Lua类对象就代表了一个Lua解释器(或Lua执行环境),Lua解释器可以同时存在多个,并且它们之间是完全相互独立的。

简单说明下步骤:

lua,c,相互调用,调用lua,调用lua函数

在根目录处添加LuaInterface.dll的引用:

lua,c,相互调用,调用lua,调用lua函数

  lua,c,相互调用,调用lua,调用lua函数

  lua,c,相互调用,调用lua,调用lua函数

不啰嗦、直接上代码:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;

namespace CSharpToLua
{
  class Program
  {
    static void Main(string[] args)
    {
      // 新建一个Lua解释器,每一个Lua实例都相互独立, 一个global全局域
      Lua lua = new Lua();

      //---------------------------------------------------
      // Lua的索引操作[]可以创建、访问、修改global域
      lua["age"] = 20;
      lua["name"] = "Mr.huang";

      string luaCode = "print("This is Lua code")";
      lua.DoString(luaCode);//执行lua