我在 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
非常感谢任何帮助或指导。
谢谢大家!
当您创建指向 double 的指针时,ctypes 会动态创建 LP_c_double。 IE。
LP_c_double = POINTER(c_double)
至此,你已经创建了一个Ctype。您现在可以创建这些指针的实例。
my_pointer_one = LP_c_double()
但这是关键所在。您的函数不需要一个指向双精度的指针。它期待着一系列双打。在 C 中,X 类型的数组由指向该数组中第一个元素的指针(X 类型)表示。
换句话说,要创建一个指向适合传递给函数的双精度型的指针,您实际上需要分配一个有限大小的双精度型数组(ReturnPulse 的文档应指示分配多少),然后直接传递该元素(不要强制转换,不要取消引用)。
i.e.
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)
现在应该用值填充五个数组returned通过返回脉冲。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)