Ссылочный аргумент фреймворка Python .net Double[]&
Используя Python для.Net Framework, я пытаюсь вызвать метод из файла C# .dll. Этот метод имеет следующие аргументы:
public static void ExternalFunction(
String Arg1,
ref Double[]& Arg2,
);
Я понял, что.Net Framework конвертирует Python-плавающие числа в двойные. Теперь я хотел бы знать, как создать массив (double) и передать его как ссылку на внешний метод.
У меня есть следующий код:
import clr
clr.AddReference("MyDll")
from MyLib import MyClass
myName = "Benjamin"
r = MyClass.ExternalFunction(myName, 0.0);
print "Result: %s"%r
1 ответ
Вы можете вызвать этот метод, указав список (или кортеж) с плавающей точкой в качестве второго параметра.
MyClass.ExternalFunction(myName, [0.0]);
Там будет преобразование между 2 различными структурами данных в 2 виртуальных машинах. Python.Net преобразует список чисел с плавающей запятой в массив двойников в среде.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