繁体   English   中英

Python ctypes参数错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM