Python ctypes调用C函数返回整数而非浮点数问题求助
问题解决:ctypes调用C函数返回值不符合预期
问题原因
ctypes 默认将通过 CDLL 加载的函数返回值类型视为 int,但你的C函数实际返回的是 float 类型。这种类型不匹配导致浮点返回值被错误解析为整数,最终得到了非预期结果。
解决方法
需要显式指定C函数的返回值类型为 c_float,同时建议显式声明参数类型,让调用更规范:
修改后的main.py代码:
from ctypes import * so_file = '/home/folder/spammodule.so' main = CDLL(so_file) # 指定函数返回值类型为float main.calculate_change.restype = c_float # 可选:显式声明参数类型,提升调用严谨性 main.calculate_change.argtypes = [c_float, c_float] print(main.calculate_change(100.0, 200.0))
额外说明
- 显式设置
restype和argtypes不仅能解决返回值解析错误,还能在调用时自动完成类型转换,无需手动用c_float()包装参数。 - 对于涉及复杂类型交互的ctypes调用,显式声明类型是避免错误的最佳实践。
内容的提问来源于stack exchange,提问作者Stack
相关产品推荐
相关产品推荐

