如何在C#5.0应用程序中嵌入lua(或其他一些脚本语言)

use*_*430 10 c# lua dynamic-language-runtime

首先,我想提前为我的英语推荐.

我的问题是具体说明我需要在C#应用程序中能够解释为所述应用程序提供的Lua脚本.Lua脚本必须能够访问用C#编写的类.

在搜索堆栈溢出以获得答案后,​​我认为处理此主题的问题已经过时(我认为在动态语言运行时成为.NET Framework的一部分之前就已经问到了这些问题,而且我认为事情现在变得简单了DLR).

基本上,我想做的就是这个

 TypeThatExecutesLua.MethodToLoadLuaScript(script.lua);
 TypeThatExecutesLua.Execute();
Run Code Online (Sandbox Code Playgroud)

现在,假设我们不关心script.lua返回什么.但是有些情况下第二行会是这样的:

dynamic result = TypeThatExecutesLua.Execute();
Run Code Online (Sandbox Code Playgroud)

或者:动态结果; TypeThatExecutesLua.Execute(out result);

同样,如果可能的话,我希望能够将参数传递给脚本(不确定参数在这种情况下是否正确,我对脚本知之甚少),如下所示:

int argument
TypeThatExecutesLua.Execute(argument);
Run Code Online (Sandbox Code Playgroud)

这可能是一个非常基本的问题,但我真的很感激能够真正向我解释如何做到这一点的答案,而不是指向某个页面的链接,因为我缺乏基本知识来理解我遇到的大部分材料到目前为止,通过搜索网络(我相当擅长C#,但这超出了语言本身的范围).

作为最后一点,我想说,即使Lua是我的目标语言,如果解决方案与任何语言相似或相同,只需要在项目中下载和引用的dll以及dll的界面等各种变化本身,我想知道.

Cra*_*aig 5

看起来 DynamicLua ( GitHub , NuGet Package ) 有你想要的:

dynamic lua = new DynamicLua.DynamicLua();
lua("print('hello world')"); // => hello world
double answer = lua("return 42"); 
Console.WriteLine(answer); // => 42
var arg = 5;
lua("function luafunction(a) return a + 1 end");
dynamic answer2 = lua.luafunction(arg);
Console.WriteLine(answer2); // => 6

Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

DynamicLua 基于NLua,它也可以完成所有这些,但它会更复杂。