问题描述
从Python中,我正在调用dll中的C#函数。这是通过“ python.net”完成的。大多数功能都可以在Python中正确调用。但是,有一个函数由于参数上的数据类型而有问题。
bool SetValueAsInt64U(ulong rValue);
在Python中,我用
来称呼它SetValueAsInt64U(22);
这给出了错误信息:
TypeError:没有方法匹配SetValueAsInt64U的给定参数:(
SetValueAsInt64U(c_ulong(22));
这给出了类似的错误:
TypeError:没有方法匹配SetValueAsInt64U的给定参数:(
有关更多信息,我正在显示正确的电话。 在C#中,还有另一个带有签名参数的函数:
bool SetValueAsInt64(long rValue)
在Python中,我可以在没有任何错误消息的情况下调用该函数,例如:
SetValueAsInt64(-5);
所以问题是如何使用Python中无符号类型的参数调用C#函数?
解决方法
在这种情况下,我会做的只是对该方法进行重载以获取int参数,如果达到最大int范围2,147,483,647,python会将其解析为ulong。
,使用numpy。
import numpy as np
dp.SetValueAsInt64U(np.uint64(22));
此方法不需要更改C#代码。这是Python代码中的解决方案。
numpy数据类型为: https://numpy.org/devdocs/user/basics.types.html