[英]How to call an IronPython 2 method from C#
我可以将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文件,以及执行产生的作用域。
找到了一种方法:
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还没有调用。
更新到较新的IronPython 2.6Beta及其脚本dll之后,我发现我可以编写:
var h = ops.InvokeMember(pythonObject, member, new object[0]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.