【发布时间】:2018-01-01 00:00:29
【问题描述】:
使用 ctypes 从 Python 调用 dll,我想将 ctypes 数组传递给 dll。这是 Python 代码:
ReturnVec = ctypes.c_float * len(arrA)
t = type(ReturnVec)
hllDll = ctypes.WinDLL(r"C:/Temp2/Test_Project_3B/Std_Math_Formulas.dll")
SimpleTest = hllDll.SimpleTest
SimpleTest.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_float)]
SimpleTest.restype = ctypes.c_void_p
retvar = SimpleTest(ctypes.byref(pvarr),ctypes.c_float(ReturnVec))
最后一行抛出错误:
“TypeError:必须是实数,而不是_ctypes.PyCArrayType。”
变量t 表明它的类型是ctypes.PyCArrayType。变量ReturnVec 表明它的类型是c_floatarray_1000(其中1000 是数组的长度)。
我尝试将其转换为 float:
aq = ctypes.cast(ReturnVec, ctypes.c_float)
但它会返回:
"
: 类型错误"
我尝试将它转换为指针,我得到了同样的结果:
floatPtr = ctypes.cast(ReturnVec, ctypes.POINTER(ctypes.c_float))
我对此进行了详细研究,关于这个问题有很多线程,但没有一个描述我的情况。
【问题讨论】: