预期的LP_c_double实例而不是c_double_Array-python ctypes错误

我在DLL中有一个必须用python代码包装的函数.该函数期望指向双精度数组的指针.这是我得到的错误:

Traceback (most recent call last):
  File "C:\....\.FROGmoduleTEST.py", line 243, in <module>
    FROGPCGPMonitorDLL.ReturnPulse(ptrpulse, ptrtdl, ptrtdP,ptrfdl,ptrfdP)
ArgumentError: argument 1: <type 'exceptions.TypeError'>: expected LP_c_double instance instead of c_double_Array_0_Array_2

我试图像这样铸造它:

ptrpulse = cast(ptrpulse, ctypes.LP_c_double)

但我得到:

NameError: name 'LP_c_double' is not defined

任何帮助或指示,我们将不胜感激.
谢谢大家!

解决方法:

LP_c_double是在创建指向double的指针时由ctypes动态创建的.即

LP_c_double = POINTER(c_double)

至此,您已经创建了一个C类型.现在,您可以创建这些指针的实例.

my_pointer_one = LP_c_double()

但是,这是踢脚线.您的函数不期望指向double的指针.期望有双打.在C语言中,类型X的数组由指向该数组中第一个元素的指针(类型X)表示.

换句话说,要创建指向适合传递给函数的double的指针,您实际上需要分配一个有限大小的double数组(ReturnPulse的文档应指出要分配的数量),然后直接传递该元素(请勿投射,请勿取消引用).

size = GetSize()
# create the array type
array_of_size_doubles = c_double*size
# allocate several instances of that type
ptrpulse = array_of_size_doubles()
ptrtdl = array_of_size_doubles()
ptrtdP = array_of_size_doubles()
ptrfdl = array_of_size_doubles()
ptrfdP = array_of_size_doubles()
ReturnPulse(ptrpulse, ptrtdl, ptrtdP, ptrfdl, ptrfdP)

现在,应该使用ReturnPulse返回的值填充五个数组.

上一篇:javaWEB简单商城项目


下一篇:Javascript-我们如何键入一个类工厂,该工厂生成给定对象文字的类?