/// <summary> /// 执行脚本文件 /// </summary> /// <param name="file">文件名</param> /// <param name="fun">函数名</param> /// <param name="param1">参数1</param> /// <param name="param2">参数2</param> /// <param name="param3">参数3</param> /// <returns>返回执行结果</returns> public object RunFile(string file, object fun, object param1 = null, object param2 = null, object param3 = null) { if (string.IsNullOrEmpty(file)) { Ex = "脚本文件名不能为空"; return(null); } file = Cache.ToFullName(file, _Dir); if (!File.Exists(file)) { Ex = "脚本不存在!请确认脚本:“" + file + "”是否存在。"; return(null); } try { Lua Eng = new Lua(); Eng.LoadCLRPackage(); Eng["Cache"] = new Cache(); var Engine = new EngineHelper { Dir = Path.GetDirectoryName(file) + "\\" }; Eng["Engine"] = Engine; Eng.DoFile(file); var funObj = Eng.GetFunction("Main"); if (param1 == null) { return(funObj.Call(fun)[0]); } else if (param2 == null) { return(funObj.Call(fun, param1)[0]); } else if (param3 == null) { return(funObj.Call(fun, param1, param2)[0]); } else { return(funObj.Call(fun, param1, param2, param3)[0]); } } catch (Exception ex) { Ex = ex.ToString(); } return(null); }
/// <summary> /// 执行脚本文件 /// </summary> /// <param name="file">文件名</param> /// <param name="fun">函数名</param> /// <param name="param1">参数1</param> /// <param name="param2">参数2</param> /// <param name="param3">参数3</param> /// <returns>返回执行结果</returns> public object RunFile(string file, object fun, object param1 = null, object param2 = null, object param3 = null) { if (string.IsNullOrEmpty(file)) { Ex = "脚本文件名不能为空"; return(null); } file = Cache.ToFullName(file, _Dir); if (!File.Exists(file)) { Ex = "脚本不存在!请确认脚本:“" + file + "”是否存在。"; return(null); } try { var scope = Eng.CreateScope(); scope.SetVariable("Cache", new Cache()); var Engine = new EngineHelper { Dir = Path.GetDirectoryName(file) + "\\" }; scope.SetVariable("Engine", Engine); Eng.CreateScriptSourceFromFile(file, Encoding.UTF8).Execute(scope); dynamic dyn = scope; if (param1 == null) { return(dyn.Main(fun)); } else if (param2 == null) { return(dyn.Main(fun, param1)); } else if (param3 == null) { return(dyn.Main(fun, param1, param2)); } else { return(dyn.Main(fun, param1, param2, param3)); } } catch (Exception ex) { Ex = ex.ToString(); } return(null); }
/// <summary> /// 获取函数 /// </summary> /// <param name="file">文件名</param> /// <returns>返回函数</returns> public dynamic GetClass(string file) { if (string.IsNullOrEmpty(file)) { Ex = "脚本文件名不能为空"; return(null); } file = Cache.ToFullName(file, _Dir); if (!File.Exists(file)) { Ex = "脚本不存在!请确认脚本:“" + file + "”是否存在。"; return(null); } try { Lua Eng = new Lua(); Eng.LoadCLRPackage(); Eng["Cache"] = new Cache(); var Engine = new EngineHelper { Dir = Path.GetDirectoryName(file) + "\\" }; Eng["Engine"] = Engine; var code = File.ReadAllText(file, Encoding.UTF8); Eng.DoFile(file); var funs = ""; var ms = new Regex(@"function ([a-zA-Z0-9]+)\(").Matches(code); for (var i = 0; i < ms.Count; i++) { var funName = ms[i].Groups[1].Value; funs += funContent.Replace("funName", funName); } var codeCS = "using System;\npublic class ScriptLua : MM.Engine.NluaCommon\n{\n" + funs + "\n}"; dynamic dyn = CSScript.Evaluator.CompileCode(codeCS).CreateObject("*"); if (dyn != null) { dyn.Eng = Eng; return(dyn); } } catch (Exception ex) { Ex = ex.ToString(); } return(null); }
/// <summary> /// 获取函数 /// </summary> /// <param name="file">文件名</param> /// <returns>返回函数</returns> public dynamic GetClass(string file) { if (string.IsNullOrEmpty(file)) { Ex = "脚本文件名不能为空"; return(null); } file = Cache.ToFullName(file, _Dir); if (!File.Exists(file)) { Ex = "脚本不存在!请确认脚本:“" + file + "”是否存在。"; return(null); } try { var code = File.ReadAllText(file, Encoding.UTF8); var dll = ""; if (code.Contains("using ")) { var ms = new Regex("using [.A-Z0-9a-z]+;").Matches(code); for (var i = 0; i < ms.Count; i++) { var o = ms[i]; var value = o.Value; dll += value + "\n"; code = code.Replace(value, ""); } } var scope = CSScript.Evaluator.CompileCode(dll + "public class Script : MM.Engine.Common\n{\n" + code + "\n}").CreateObject("*"); if (scope != null) { scope.SetValue("Cache", new Cache()); var Engine = new EngineHelper { Dir = _Dir }; scope.SetValue("Engine", Engine); return(scope); } } catch (Exception ex) { Ex = ex.ToString(); } return(null); }
/// <summary> /// 执行脚本代码 /// </summary> /// <param name="code">代码</param> /// <param name="fun">函数名</param> /// <param name="param1">参数1</param> /// <param name="param2">参数2</param> /// <param name="param3">参数3</param> /// <returns>返回执行结果</returns> public object RunCode(string code, object fun, object param1 = null, object param2 = null, object param3 = null) { if (string.IsNullOrEmpty(code)) { Ex = "脚本不能为空"; return(null); } try { var Eng = new VBScriptEngine { EnableAutoHostVariables = true }; Eng.AddHostType("Console", typeof(Console)); Eng.AddHostObject("Cache", new Cache()); var Engine = new EngineHelper { Dir = _Dir }; Eng.AddHostObject("Engine", Engine); Eng.Execute(code); var dyn = Eng.Script; if (param1 == null) { return(dyn.Main(fun)); } else if (param2 == null) { return(dyn.Main(fun, param1)); } else if (param3 == null) { return(dyn.Main(fun, param1, param2)); } else { return(dyn.Main(fun, param1, param2, param3)); } } catch (Exception ex) { Ex = ex.ToString(); } return(null); }
/// <summary> /// 执行脚本代码 /// </summary> /// <param name="code">代码</param> /// <param name="fun">函数名</param> /// <param name="param1">参数1</param> /// <param name="param2">参数2</param> /// <param name="param3">参数3</param> /// <returns>返回执行结果</returns> public object RunCode(string code, object fun, object param1 = null, object param2 = null, object param3 = null) { if (string.IsNullOrEmpty(code)) { Ex = "脚本不能为空"; return(null); } try { Lua Eng = new Lua(); Eng.LoadCLRPackage(); Eng["Cache"] = new Cache(); var Engine = new EngineHelper { Dir = _Dir }; Eng["Engine"] = Engine; Eng.DoString(code, "Script"); var funObj = Eng.GetFunction("Main"); if (param1 == null) { return(funObj.Call(fun)[0]); } else if (param2 == null) { return(funObj.Call(fun, param1)[0]); } else if (param3 == null) { return(funObj.Call(fun, param1, param2)[0]); } else { return(funObj.Call(fun, param1, param2, param3)[0]); } } catch (Exception ex) { Ex = ex.ToString(); } return(null); }
/// <summary> /// 执行脚本代码 /// </summary> /// <param name="code">代码</param> /// <param name="fun">函数名</param> /// <param name="param1">参数1</param> /// <param name="param2">参数2</param> /// <param name="param3">参数3</param> /// <returns>返回执行结果</returns> public object RunCode(string code, object fun, object param1 = null, object param2 = null, object param3 = null) { if (string.IsNullOrEmpty(code)) { Ex = "脚本不能为空"; return(null); } try { var scope = Eng.CreateScope(); scope.SetVariable("Cache", new Cache()); var Engine = new EngineHelper { Dir = _Dir }; scope.SetVariable("Engine", Engine); Eng.CreateScriptSourceFromString(code).Execute(scope); dynamic dyn = scope; if (param1 == null) { return(dyn.Main(fun)); } else if (param2 == null) { return(dyn.Main(fun, param1)); } else if (param3 == null) { return(dyn.Main(fun, param1, param2)); } else { return(dyn.Main(fun, param1, param2, param3)); } } catch (Exception ex) { Ex = ex.ToString(); } return(null); }