工程环境搭建:

  • 下载luainterface-1.5.3.zip文件,使用到的dll为Built目录下的LuaInterface.dll、lua51.dll、luanet.dll
  • LuaInterface.dll为C#的dll,需要引用到工程中
  • lua51.dll、luanet.dll为C++的dll,需要拷贝到工程的输出目录下(Debug)
  • C#调用Lua需要使用:LuaInterface.dll和lua51.dll
  • Lua调用C#的类需要使用:LuaInterface.dll和luanet.dll,luanet.dll拷贝到工程输出目录,lua脚本中就不需要使用package.cpath和require了

很多帖子并没有讲清楚导致报错:

“LuaInterface.LuaException”类型的未经处理的异常在 LuaInterface.dll 中发生
其他信息: error loading module 'luanet' from file '.\luanet.dll'
也就是云哥我这么给力
 namespace TestLua
{
public class Program
{ public string name = "zhaozongyun";
static void Main(string[] args)
{
//创建lua解释器(也叫Lua虚拟机)
Lua lua1 = new Lua(); Console.WriteLine("--->> C#中执行Lua字符串"); //C#中执行Lua字符串
lua1.DoString("num = 111");
lua1.DoString("str = 'zhaozongyun'");
Object[] values = lua1.DoString("return num, str");
foreach (Object obj in values)
{
Console.WriteLine(obj);
} Console.WriteLine("--->> C#注册的普通方法到Lua中,并执行Lua字符串"); //C#注册的普通方法到lua中,并执行Lua字符串
Program p = new Program();
Lua lua2 = new Lua();
lua2.RegisterFunction("LuaMethod1", p, p.GetType().GetMethod("CLRMethod"));
lua2.DoString("LuaMethod1()"); Console.WriteLine("--->> C#注册静态方法到Lua中,并执行Lua字符串"); //C#注册静态方法到Lua中,并执行Lua字符串
lua2.RegisterFunction("LuaMethod2", null, typeof(Program).GetMethod("StaticMethod"));
lua2.DoString("LuaMethod2()"); Console.WriteLine("--->> C#中执行Lua脚本"); //C#中执行lua脚本文件
Lua lua3 = new Lua();
lua3.DoFile("myLua1.lua"); Console.WriteLine("--->>C#执行Lua脚本,Lua脚本中加载C#类,并访问C#"); //C#执行Lua文件,Lua文件加载C#类,并调用C#
Lua lua4 = new Lua();
lua4.DoFile("myLua2.lua");
lua4.DoFile("myLua3.lua"); Console.ReadKey();
} public void CLRMethod()
{
Console.WriteLine("CLRMethod");
} public static void StaticMethod()
{
Console.WriteLine("StaticMethod");
}
}
}

Lua1脚本

 num =
string = "hello world"
print(string)

Lua2脚本

 --加载CLR的类型、实例化CLR对象
luanet.load_assembly("System")
Int32 = luanet.import_type("System.Int32")
print(Int32)

Lua3脚本

 --require "luanet"
--加载CLR的类型
luanet.load_assembly("TestLua")
Program = luanet.import_type("TestLua.Program")
--实例化CLR对象
program = Program()
print(program.name)
program:CLRMethod()

Lua与.net的CLR相互调用的更多相关文章

  1. C#与lua相互调用

    Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)C#调用Lua 测试环境:在VS2015中建一个C# ...

  2. C程序与Lua脚本相互调用

    Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...

  3. Lua与C++相互调用

    {--1.环境--} 为了快速入手,使用了小巧快速的vc++6.0编译器 以及在官网下载了Lua安装包..官网地址{--http://10.21.210.18/seeyon/index.jsp--} ...

  4. uLua学习笔记(三):Unity3D和Lua之间的相互调用

    这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方 ...

  5. Unity3D 预备知识:C#与Lua相互调用

    在使用Unity开发游戏以支持热更新的方案中,使用ULua是比较成熟的一种方案.那么,在使用ULua之前,我们必须先搞清楚,C#与Lua是怎样交互的了? 简单地说,c#调用lua, 是c# 通过Pin ...

  6. lua语言自学知识点----Lua与.Net相互调用

    知识点: LuaInterface作用是用来完成Lua与C#的相互调用. LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级) 2.luane ...

  7. Lua 与 OC 相互调用

    本文主要讲如何完成lua和object-c的相互调用.       lua是一种脚本语言,可以方便的移植到各种宿主语言中,并且可以支持热更新,在游戏开发中也能当做主要的语言来编写游戏的逻辑,但是要接入 ...

  8. lua编程之lua与C相互调用

    lua是扩展性非常良好的语言,虽然核心非常精简,但是用户可以依靠lua库来实现大部分工作.除此之外,lua还可以通过与C函数相互调用来扩展程序功能.在C中嵌入lua脚本既可以让用户在不重新编译代码的情 ...

  9. 原生实现C#和Lua相互调用-Unity3D可用

    引言     本篇简单介绍如何在C#中执行Lua脚本,传递数据到Lua中使用,以及Lua中调用C#导出的方法等.在Unity中开发测试,并打IL2CPP的Android包在模拟器上运行通过.Lua版本 ...

随机推荐

  1. iOS学习笔记(十三)——获取手机信息(UIDevice、NSBundle、NSLocale)

    iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用户设备.系统信息.应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发api可以获取到 ...

  2. C++中string中的erase函数怎么使用

    erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator p ...

  3. jQuery-ui datepicker的使用演示代码

    这两天使用jquery做一个web端展示的工具,遇到了不少问题也学到了不少知识.其中有一个就是在页面中显示日期选择器的功能,通过百度直接使用的是jquery datepicker 看到一篇使用说明很不 ...

  4. 【uoj57】 WC2013—平面图

    http://uoj.ac/problem/57 (题目链接) 题意 给出二位平面上n个点,点之间有一些连线,连线不在顶点之外的地方相交,将平面分为若干个区域.给出一些询问点对,问从这个点所在的区域走 ...

  5. python 爬照片 模拟浏览器 先登录账号

    # -*- coding: utf-8 -*-"""Created on Mon Mar 7 10:53:40 2016 @author: root"" ...

  6. IOS 创建和设置pch

    1.添加pch文件 2.修改工程配置文件 Building Settings->All->Apple LLVM 6.0 -Language -> Prefix Header

  7. Xcode 添加前缀

    项目导航栏>Targets>右侧的Utilities>Class Prefix

  8. Struts2文件的下载

    1.下载登录页面download.jsp 1: <%@ page language="java" contentType="text/html; charset=U ...

  9. C# 堆栈和堆 Heap & Stack

    首先堆栈和堆(托管堆)都在进程的虚拟内存中.(在32位处理器上每个进程的虚拟内存为4GB) 堆栈stack 堆栈中存储值类型. 堆栈实际上是向下填充,即由高内存地址指向低内存地址填充. 堆栈的工作方式 ...

  10. js与AMD模块加载

    目的: 了解AMD规范与CMD规范,写一个模块加载器雏形. 基本概念: AMD是异步模块定义规范,而CMD是通用模块定义规范.其他的还有CommonJS Modules规范. 对于具体的规范,可以参考 ...