繁体   English   中英

如何从C#调用IronPython 2方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM