• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

lua学习笔记3--lua与c#交互

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

LuaInterface是C#与Lua连接的桥梁

LuaInterface是一个开源项目工程,内部有两个核心DLL文件:
  LuaInterface.dll:在C#中操作Lua代码需要依赖该文件;
  luanet.dll:在Lua中访问C#的类库脚本需要依赖该文件
将两个dll文件拷贝到项目工程
项目工程设置"引用"导入LuaInterface.dll
将两个dll的属性都设置成"如果较新则复制"

操作:
  引入LuaInterface命名空间
  实例化Lua解析器对象[在C#中执行Lua代码,靠的就是这个对象]
  Lua lua = new Lua();
  Lua解析器对象操作Lua代码空间
  使用Lua解析器对象,往Lua代码空间内写入变量,然后再读取使用变量
  (绝大多数情况,直接在C#中使用Lua解析器对象,加载一个Lua脚本文件进行运行)

 

C#内执行Lua代码:
  语法格式       Lua解析器对象.DoString("Lua代码");
  注意:
      DoString()方法主要用于执行一些较短的Lua代码片段
      DoString()方法执行过的代码,都会添加到Lua代码空间,在Lua文件中,是直接可以访问到这些代码的

//创建一个Lua解析器
Lua lua = new Lua();

//变量的声明和访问 lua.DoString("name = 'cxk' age = 72 address = 'beijing'"); lua.DoString("print(name, age, address)"); //for循环语句 lua.DoString(@"for i = 0, 10, 1 do            print(i)          end"); //函数的定义与调用 lua.DoString(@"function Show()             print('lua show Function')          end          Show()          "); //table数组声明与访问 lua.DoString("myArray = { 'AAA', 'BBB', 'CCC', 'DDD'}"); lua.DoString(@"for i = 1, table.getn(myArray), 1 do             print(myArray[i])          end"); 

C#内执行Lua文件
    Lua解析器对象.DoFile("[路径]Lua文件.lua") lua文件编码记得改为UTF-8或者ANSI

Lua lua = new Lua();
lua.DoFile("xxx.lua");
        
//GetString() 取Lua中字符串数据
lua.GetString("name");

//GetNumber() 取Lua中数值数据
lua.GetNumber("age");

//GetFunction 取Lua中的函数,只需写函数名
LuaFunction luaShow = lua.GetFunction("Show");
luaShow.Call();//执行lua中的函数
LuaFunction add = lua.GetFunction("Add");
System.Object[] obj = add.Call(10, 20);

lua访问已存在的C#代码

1导入luanet.dll require "luanet"
2获取程序集 luanet.load_assembly("程序集名")
3获取类型 变量名=luanet.import_type("程序集名.类名")

require "launet"

luanet.load_assembly("three")

Calc = luanet.import_type("three.Calc")

print(Calc.name)
print(Calc.Jia(10, 20))

lua访问C#类库

require "launet"
luanet.load_assembly("System")
Console = luanet.import_type("System.Console")
Console.WriteLine("")

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
通过Lua来实现Redis的分布式锁发布时间:2022-07-22
下一篇:
lua转让C++书面DLL达到“热更新”发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap