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).这种变化影响最小.
| 归档时间: |
|
| 查看次数: |
6474 次 |
| 最近记录: |