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

3

我正在使用“python.net”从Python中调用一个在dll中的C#函数。大多数函数可以正确地在Python中调用。但是,由于参数数据类型的问题,有一个函数我存在困扰。

在C#中,有一个函数需要使用unsigned long类型:

bool SetValueAsInt64U(ulong rValue);

在Python中,我使用以下方式调用:

SetValueAsInt64U(22);

这会出现错误信息: 类型错误:对于SetValueAsInt64U没有匹配给定参数的方法:()
我还尝试使用ctypes,并像这样调用函数:
SetValueAsInt64U(c_ulong(22));

这会产生类似的错误: TypeError: SetValueAsInt64U 的给定参数无法匹配:(<class 'ctypes.c_ulong'>)。
更多信息,请参考下面的正确调用。 在C#中,还有一种使用有符号参数的函数。
bool SetValueAsInt64(long rValue)

在Python中,我可以调用函数而不会收到任何错误消息,例如:
SetValueAsInt64(-5);

那么问题是如何从Python调用带有无符号类型参数的C#函数?
3个回答

0
为避免依赖NumPy,您可以将整数转换为System.UInt64
import clr
import System

SetValueAsInt64U(System.UInt64(22))

0
在这种情况下,我会做的是重载该方法以接受一个 int 参数,如果它达到最大 int 范围 2,147,483,647,Python 将将其解析为 ulong。

谢谢!这个方法应该添加在C#还是Python中? - Yu Guo
在C#中添加这个方法。 - rowdyolly
是的,我尝试在C#中添加重载方法。这是解决问题的一种方法。但是我更喜欢一种不需要更改C#代码的方式,因为我的C# dll也提供给其他C#用户使用。因此,如果有另一种可能性,我不想将C#层与仅为Python的东西混合。请查看我最终在numpy中找到的解决方案。感谢您的帮助。 - Yu Guo

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接