2013-05-10 47 views
3

使用Python for .Net框架我試圖從C#.dll文件中調用方法。此方法有以下參數:Python .net框架參考參數Double []&

public static void ExternalFunction(
    String Arg1, 
    ref Double[]& Arg2, 
); 

我瞭解.Net框架將Python浮動轉換爲雙打。現在我想知道如何創建一個數組(double)並將其作爲外部方法的參考。

我有下面的代碼:

import clr 

clr.AddReference("MyDll") 
from MyLib import MyClass 

myName = "Benjamin" 

r = MyClass.ExternalFunction(myName, 0.0); 
print "Result: %s"%r 
+0

http://ironpython.net/documentation/dotnet/dotnet.html#methods-with-ref-or-out-parameters – poke 2013-05-10 14:11:10

+0

我實際上是不打算使用IronPython的。我相信這不一定是這種情況。但如果是這樣,我會願意接手Ironpython。 – Benjamin 2013-05-10 15:08:14

回答

3

您可以通過提供浮桶的列表(或元組)作爲第二個參數調用此方法。

MyClass.ExternalFunction(myName, [0.0]); 

在2個虛擬機中會有2個不同數據結構之間的轉換。 Python.Net會將python的浮點列表轉換爲.Net環境中的雙精度數組,並通過引用您的函數來傳遞它。對第二個參數所做的更改不會被傳播回python。

通過使用反射,您可以更好地控制參數編組。

import clr 
clr.AddReference("MyDll") 
import System 
import MyLib 

myClassType = System.Type.GetType("MyLib.MyClass, MyDll") 
method = myClassType.GetMethod("ExternalFunction") 
numbersArray = System.Array[System.Double]([1.0, 2.0, 3.0]) 
parameters = System.Array[System.Object](["Benjamin",numbersArray]) 
method.Invoke(None,parameters) 


numbersArray = parameters[1] # an updated Arg2 can be retrieved from parameters array