zoukankan      html  css  js  c++  java
  • C#与lua相互调用

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

    (一)C#调用Lua

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

      LuaInterface下载地址:http://luaforge.net/projects/luainterface/ (下载luainterface-1.5.3,这里面的资源比较多)

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

      简单说明下步骤:

      

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

      

      

      

      不啰嗦、直接上代码:

      

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using LuaInterface;
     7 
     8 namespace CSharpToLua
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14             // 新建一个Lua解释器,每一个Lua实例都相互独立, 一个global全局域
    15             Lua lua = new Lua();
    16 
    17             //---------------------------------------------------
    18             // Lua的索引操作[]可以创建、访问、修改global域
    19             lua["age"] = 20;
    20             lua["name"] = "Mr.huang";
    21 
    22             string luaCode = "print("This is Lua code")";
    23             lua.DoString(luaCode);//执行lua脚本代码
    24                 lua.DoFile("F:\CSharpToLua\CSharpToLua\ScriptsFromFile.lua");//执行lua脚本文件,这里我直接用了绝对定位
    25 
    26             double age = (double)lua["age"];
    27 
    28             Console.WriteLine("age = {0}", age);
    29             Console.WriteLine("width = {0}", lua["width"]);
    30             Console.ReadKey();
    31         }
    32     }
    33 
    34 }

      可以跟着敲一遍,提高与代码的亲密度 ~.~   And then 点击启动

      咦、这时会出现一个报错、但是不要紧、

      

      解决方案:

      

      再次运行、就可以看到结果啦、惊不惊喜、意不意外

      

      简单的介绍C#如何调用Lua代码、当然、还有很多丰富的API小伙伴们可以自行查阅哟。

    (二)Lua调用C#

      直接上代码 ~.~

     

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using LuaInterface;
     7 
     8 namespace CSharpToLua
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14             // 新建一个Lua解释器,每一个Lua实例都相互独立, 一个global全局域
    15             Lua lua = new Lua();
    16 
    17 
    18             //---------------------------------------------------lua调用c#函数
    19             TestClass obj = new TestClass();
    20 
    21             // 注册CLR对象方法到Lua,供Lua调用   typeof(TestClass).GetMethod("TestPrint")
    22             lua.RegisterFunction("TestPrint", obj, obj.GetType().GetMethod("TestPrint"));
    23 
    24             // 注册CLR静态方法到Lua,供Lua调用
    25             lua.RegisterFunction("TestStaticPrint", null, typeof(TestClass).GetMethod("TestStaticPrint"));
    26 
    27             lua.DoString("TestPrint(10)");
    28             lua.DoString("TestStaticPrint()");
    29 
    30             Console.ReadKey();
    31         }
    32     }
    33 
    34     class TestClass
    35     {
    36         private int value = 0;
    37 
    38         public void TestPrint(int num)
    39         {
    40             value = num;
    41             Console.WriteLine("CSharp"+value);
    42         }
    43 
    44         public static void TestStaticPrint()
    45         {
    46             Console.WriteLine("TestStaticPrint");
    47         }
    48     }
    49 }

      点击运行.................

       

      perfect~.~   当然、这里只是简单的介绍C#与Lua是如何相互调用的、小伙伴可自行Google大量丰富的API方便开发哟

      重要的事要说三遍:LuaInterface是主要接口、LuaInterface是主要接口、LuaInterface是主要接口

  • 相关阅读:
    五分钟免费搭建一个自己的网站
    网站大全-工具类,学习类网站
    vscode常用插件
    vscode常用快捷键
    IIS 如何设置多个Access-Control-Allow-Origin
    ajax跨域,这应该是最全的解决方案了
    Failed to execute ‘createObjectURL’ on ‘URL’: No function was found that matched the signature provided.
    Github新项目Dress(好耶是女装)
    Eclipse常用快捷键
    Javase、Javaee、Javame的区别
  • 原文地址:https://www.cnblogs.com/huangzongyi/p/7777635.html
Copyright © 2011-2022 走看看