4

使用 Python for .Net 框架我试图从 C# .dll 文件中调用一个方法。此方法具有以下参数:

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

我了解 .Net 框架将 Python 浮点数转换为双精度数。现在我想知道如何制作一个数组(双精度)并将其作为对外部方法的引用传递。

我有以下代码:

import clr

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

myName = "Benjamin"

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

1 回答 1

6

您可以通过提供浮点列表(或元组)作为第二个参数来调用此方法。

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
于 2013-08-27T13:41:10.030 回答