C#退货类型问题

C#退货类型问题,c#,python,.net,dllexport,C#,Python,.net,Dllexport,我有一个从Python调用的C#类库DLL。 不管我做什么,Python都认为返回类型是(int) 我正在使用rgisecke.DllExport导出DLL中的静态函数,下面是C#DLL中的函数示例: 如果我返回一个(int),它在Python中工作得非常可靠。 有人知道发生了什么事吗? 这是我的Python代码: import ctypes import sys from ctypes import * self.driver = ctypes.cdll.Lo

我有一个从Python调用的C#类库DLL。 不管我做什么,Python都认为返回类型是(int) 我正在使用rgisecke.DllExport导出DLL中的静态函数,下面是C#DLL中的函数示例:

如果我返回一个(int),它在Python中工作得非常可靠。 有人知道发生了什么事吗? 这是我的Python代码:

    import ctypes
    import sys
    from ctypes import *

    self.driver = ctypes.cdll.LoadLibrary(self.DLL)
    a= self.driver.Test()

Eoin

仅仅因为数据类型具有相同的名称并不意味着它们实际上是相同的。听起来python希望它所称的
“float”
具有不同的结构


这可能是有用的,并且声明python
float
是c#
double
;因此,我的建议是尝试从您的c代码返回一个
双精度

是的,这是正确的;如中所述,假设所有函数都返回
int
s。您可以通过在外部函数上设置
restype
属性来覆盖此假设。下面是一个使用libc(linux)的示例:

>>导入ctypes
>>>libc=ctypes.cdll.LoadLibrary(“libc.so.6”)
>>>libc.strtof
>>>libc.strof('1.234',无)
1962934
>>>libc.strtof.restype=ctypes.c\u float
>>>libc.strof('1.234',无)
1.2339999675750732
>>>类型(libc.strof('1.234',无))
或用于返回C字符串的函数:

>>> libc.strfry
<_FuncPtr object at 0x7f2a66f68050>
>>> libc.strfry('hello')
1727819364
>>> libc.strfry.restype = ctypes.c_char_p
>>> libc.strfry('hello')
'llheo'
>>> libc.strfry('hello')
'leohl'
>>> libc.strfry('hello')
'olehl'
libc.strfry >>>libc.strfry(“你好”) 1727819364 >>>libc.strfry.restype=ctypes.c\u char\p >>>libc.strfry(“你好”) “你好” >>>libc.strfry(“你好”) “莱奥” >>>libc.strfry(“你好”) “奥莱尔”

此方法也应适用于Windows环境。

而不是像
return(float)1.234那样返回它
您是否尝试过像
return 1.2F
那样返回它,而且浮点值将只返回一个,给您一个小数位。你要么想要它作为一个双精度的,十进制的或整数的解决方案是有点比我担心的复杂,我尝试了你的建议,现在没有改变。现在我不关心精度,我只想要任何其他的返回类型,而不是INT。你可以返回
string
或其他非数字类型吗?你可以直接使用pythonnet interop,而不需要所有这些手动包装的代码。我担心,不管我使用什么返回类型,Python总是假定它是INT。谢谢!!这适用于双返回类型,我将很快测试其余的,并让您知道
>>> import ctypes
>>> libc = ctypes.cdll.LoadLibrary("libc.so.6")
>>> libc.strtof
<_FuncPtr object at 0x7fe20504dd50>
>>> libc.strtof('1.234', None)
1962934
>>> libc.strtof.restype = ctypes.c_float
>>> libc.strtof('1.234', None)
1.2339999675750732
>>> type(libc.strtof('1.234', None))
<type 'float'>
>>> libc.strfry
<_FuncPtr object at 0x7f2a66f68050>
>>> libc.strfry('hello')
1727819364
>>> libc.strfry.restype = ctypes.c_char_p
>>> libc.strfry('hello')
'llheo'
>>> libc.strfry('hello')
'leohl'
>>> libc.strfry('hello')
'olehl'