如何从Python向C#函数传递ulong类型参数?

问题描述

从Python中,我正在调用dll中的C#函数。这是通过“ python.net”完成的。大多数功能都可以在Python中正确调用。但是,有一个函数由于参数上的数据类型而有问题。

在C#中,有一个函数采用无符号长类型:

bool SetValueAsInt64U(ulong rValue);

在Python中,我用

来称呼它
SetValueAsInt64U(22);

这给出了错误信息: TypeError:没有方法匹配SetValueAsInt64U的给定参数:(

我也尝试使用ctypes,并调用以下函数

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