[英]Python ctypes argument errors
我在C ++中编写了一个测试dll,以确保在开始使用我需要的更重要的dll之前工作正常。 基本上它需要两个双打并添加它们,然后返回结果。 我一直在玩,其他测试函数我已经恢复工作,我只是因为错误而无法传递参数。 我的代码是:
import ctypes
import string
nDLL = ctypes.WinDLL('test.dll')
func = nDLL['haloshg_add']
func.restype = ctypes.c_double
func.argtypes = (ctypes.c_double,ctypes.c_double)
print(func(5.0,5.0))
它返回名为“func”的行的错误:
ValueError: Procedure probably called with too many arguments (8 bytes in excess)
我究竟做错了什么? 谢谢。
您可能将调用约定混淆了。 我猜你有一个C函数声明如下:
double haloshg_add(double d1, double s2)
{
return d1+d2;
}
默认情况下,这将使用C调用约定。 最简单的方法是更改ctypes代码中的调用约定:
nDLL = ctypes.CDLL('test.dll')
如果你想将C代码中的调用约定更改为stdcall
(以匹配ctypes.WinDLL
),那么你会这样做:
double __stdcall haloshg_add(double d1, double s2)
无论你做什么,只做其中一个改变。 如果你两个都做了,那你就会倒退!
如果是我,我只是将Python代码更改为使用C调用约定(使用CDLL
)。 这种变化影响最小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.