gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:25 24 4
gpt4 key购买 nike

我在 DLL 中有一个函数,我必须用 Python 代码包装它。该函数需要一个指向 double 组的指针。这是我得到的错误:

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 的指针。它期待一系列 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 返回的值填充。

关于python - 预期的 LP_c_double 实例而不是 c_double_Array - python ctypes 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1413851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com