Python ctypes参数错误

paj*_*ajm 14 python dll ctypes

我在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))
Run Code Online (Sandbox Code Playgroud)

它返回名为"func"的行的错误:

ValueError: Procedure probably called with too many arguments (8 bytes in excess)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?谢谢.

Dav*_*nan 22

您可能将调用约定混淆了.我猜你有一个C函数声明如下:

double haloshg_add(double d1, double s2)
{
    return d1+d2;
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,这将使用C调用约定.最简单的方法是更改​​ctypes代码中的调用约定:

nDLL = ctypes.CDLL('test.dll')
Run Code Online (Sandbox Code Playgroud)

如果你想将C代码中的调用约定更改为stdcall(匹配ctypes.WinDLL),那么你会这样做:

double __stdcall haloshg_add(double d1, double s2)
Run Code Online (Sandbox Code Playgroud)

无论你做什么,只做其中一个改变.如果你两个都做了,那你就会倒退!

如果是我,我只是将Python代码更改为使用C调用约定(使用CDLL).这种变化影响最小.