IronPython:使用脚本中的out参数调用C#函数

时间:2013-09-13 13:02:08

标签: .net ironpython

我试图在C#应用程序中使用IronPython作为脚本语言。脚本必须使用主应用程序提供的功能(在应用程序或外部库中实现)。

虽然这对于"简单"非常完美。只有输入参数的函数(就像我发现的任何其他例子中一样),这会失败,函数带有out参数。

示例(C#代码):

public delegate int getValue_delegate(out float value);
public int getValue(out float value)
{
    value = 3.14F;
    return 42;
}

public void run(string script, string func) 
{
    ScriptRuntime runtime = ScriptRuntime.CreateFromConfiguration();
    ScriptEngine engine = runtime.GetEngine("Python");
    ScriptScope scope = engine.CreateScope();
    scope.SetVariable("myGetTemp", new getValue_delegate(getValue));
    engine.ExecuteFile(script, scope);
}

然后是IronPython脚本。我希望该值应该设置为3.14,但只能设置为0.0。

import clr
import System
ret,value = getValue()
print("getValue -> %d => %s" % (ret, value))  # => output "getValue -> 42 => 0.0

value = clr.Reference[System.Single]()
ret = getValue(value)
print("getValue -> %d => %s" % (ret, value))  # => output "getValue -> 42 => 0.0

我错过了什么吗?

注意:

  1. Out参数也可以与标准库中的函数完美配合。
  2. 大多数情况下,由于我使用外部库中的函数,因此无法更改方法签名以避免使用参数。

1 个答案:

答案 0 :(得分:0)

将C#类可见性从默认更改为公共修复了问题。

不知道为什么......