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
何か不足していますか?
ノート:
- Out パラメータは、標準ライブラリの関数でも完全に機能します。
- ほとんどの場合、外部ライブラリの関数を使用しているため、out パラメーターの使用を避けるためにメソッド シグネチャを変更することはできません。