3

C# アプリケーションで IronPython をスクリプト言語として使用しようとしています。スクリプトは、メイン アプリケーション (アプリケーションまたは外部ライブラリに実装されている) によって提供される関数を使用する必要があります。

これは、入力パラメーターのみを使用する「単純な」関数 (私が見つけた他の例のように) では完全に機能しますが、パラメーターを使用しない関数では失敗します。

例 (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. ほとんどの場合、外部ライブラリの関数を使用しているため、out パラメーターの使用を避けるためにメソッド シグネチャを変更することはできません。
4

1 に答える 1

0

C# クラスの可視性をデフォルトからパブリックに変更すると、問題が修正されました。

理由がわからない...

于 2013-09-16T07:00:33.693 に答える