tom*_*ene 11 .net c# scriptable
我有一个用C#编写的桌面应用程序我想在C#/ VB上编写脚本.理想情况下,用户可以打开侧窗格并编写类似的内容
foreach (var item in myApplication.Items)
item.DoSomething();
Run Code Online (Sandbox Code Playgroud)
语法高亮和代码完成会很棒,但我可以没有它.我不希望需要用户拥有Visual Studio 2010的安装.
我正在考虑调用编译器,加载和运行输出程序集.
有没有更好的办法?
是Microsoft.CSharp答案吗?
使用脚本语言。我想到了Tcl、LUA甚至 JavaScript。
使用 Tcl 非常简单:
using System.Runtime.InteropServices;
using System;
namespace TclWrap {
public class TclAPI {
[DllImport("tcl84.DLL")]
public static extern IntPtr Tcl_CreateInterp();
[DllImport("tcl84.Dll")]
public static extern int Tcl_Eval(IntPtr interp,string skript);
[DllImport("tcl84.Dll")]
public static extern IntPtr Tcl_GetObjResult(IntPtr interp);
[DllImport("tcl84.Dll")]
public static extern string Tcl_GetStringFromObj(IntPtr tclObj,IntPtr length);
}
public class TclInterpreter {
private IntPtr interp;
public TclInterpreter() {
interp = TclAPI.Tcl_CreateInterp();
if (interp == IntPtr.Zero) {
throw new SystemException("can not initialize Tcl interpreter");
}
}
public int evalScript(string script) {
return TclAPI.Tcl_Eval(interp,script);
}
public string Result {
get {
IntPtr obj = TclAPI.Tcl_GetObjResult(interp);
if (obj == IntPtr.Zero) {
return "";
} else {
return TclAPI.Tcl_GetStringFromObj(obj,IntPtr.Zero);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
TclInterpreter interp = new TclInterpreter();
string result;
if (interp.evalScript("set a 3; {exp $a + 2}")) {
result = interp.Result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |