如何从C#调用IronPython 2方法

时间:2009-09-11 10:03:51

标签: c# ironpython

我可以将IronPython 2课程带回我的C#。什么是新的IronPython 2方式调用该类的成员?

object ironPythonClass = scope.GetVariable("Hamish");
object[] args = new object[0];
object pythonObject = engine.Operations.Call(ironPythonClass, args);

var member = "Home";
// old way IronPython 1
// var methodResult = Ops.Invoke(this.pythonObject, SymbolTable.StringToId(member), args);

我认为我所要做的就是

var methodResult = PythonOps.Invoke(codeContext, pythonObject, SymbolTable.StringToId(member), args);

但是创建一个虚拟CodeContext似乎不对。我觉得我应该能够从我的

中获得一个
code.Execute();

运行创建类的Python文件,以及执行时产生的范围。

1 个答案:

答案 0 :(得分:3)

找到了一种方法:

var ops = engine.Operations;
var x = ops.GetMember(pythonObject, member);
var h = ops.Call(x, new object[0]);

看起来Operations会生成一个具有有用成员的OperationsObject。

查看DLR代码(Microsoft.Scripting.Hosting)但是我看到Call已被弃用:

[Obsolete("Use Invoke instead")]
public object Call(object obj, params object[] parameters) {
    return _ops.Invoke(obj, parameters);
}

我的脚本编辑0.9.20209,但是还没有Invoke。

更新到更新的IronPython 2.6Beta及其脚本dll后,我发现我可以写:

var h = ops.InvokeMember(pythonObject, member, new object[0]);