使用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
您可以通过提供浮点列表(或元组)作为第二个参数来调用此方法。
MyClass.ExternalFunction(myName, [0.0]);
2个虚拟机中的2个不同数据结构之间将进行转换。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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。