【发布时间】:2010-01-26 12:03:25
【问题描述】:
有什么方法可以让这个场景发挥作用吗?
有一个 Python 脚本。通过使用 IronPython 运行此脚本,它被构建到一个 DLL 中:
import clr
clr.CompileModules("CompiledScript.dll", "script.py")
目标是从 C# 代码调用此 DLL 的方法。 .NET Reflector 表示 DLL 中有一个类 - DLRCashedCode,我们感兴趣的方法是该类的私有静态方法。
例如脚本中有一个函数:
def scriptMethod(self, text):
...
它在DLL中的表示是:
private static object scriptMethod(Closure closure1, PythonFunction $function, object self, object text)
{
...
}
Closure 和 PythonFunction 是 IronPython 类(来自 Microsoft.Scripting.dll 和 IronPython.dll)。
到目前为止一切顺利。 C#代码是否可以调用此方法?像这样使用反射的想法
Type t = typeof(DLRCachedCode);
string methodName = "scriptMethod";
MethodInfo method = t.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Static);
object[] parameters = new object[] { "param1", "param2" }; // the "params problem"
method.Invoke(null, parameters);
由于设置了方法的参数,似乎更难了。如果它们(以任何方式)正确初始化,我们能否期望该方法能够顺利运行?
有没有更好的方法从 C# 调用这些方法?由于各种不同的原因,我们更喜欢将脚本构建为 .NET 程序集,而不是调用脚本本身。
【问题讨论】:
标签: c# python ironpython