Ben*_*min 4 .net python ironpython python.net
使用Python for .Net框架,我尝试从C#.dll文件调用方法。此方法具有以下参数:
public static void ExternalFunction(
String Arg1,
ref Double[]& Arg2,
);
Run Code Online (Sandbox Code Playgroud)
我知道.Net框架会将Python浮点数转换为双精度数。现在,我想知道如何制作一个数组(双精度)并将其作为对外部方法的引用。
我有以下代码:
import clr
clr.AddReference("MyDll")
from MyLib import MyClass
myName = "Benjamin"
r = MyClass.ExternalFunction(myName, 0.0);
print "Result: %s"%r
Run Code Online (Sandbox Code Playgroud)
您可以通过提供浮点列表(或元组)作为第二个参数来调用此方法。
MyClass.ExternalFunction(myName, [0.0]);
Run Code Online (Sandbox Code Playgroud)
两个虚拟机中的两个不同数据结构之间将进行转换。Python.Net将在.Net环境中将python的float列表转换为double数组,并将其通过引用传递给您的函数。对第二个参数所做的更改不会传播回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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2504 次 |
| 最近记录: |