本文介绍了ArgumentError:预期的LP_c_float实例,而不是指向LP_c_float_Array_50000的指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我在dll文件中有一个函数,该函数将float指针作为参数之一(参数9:float * result)。 void generate_codebook(int * nodestatus,int * nofnode,int * noftree,int * terminal,int * nofterminal,int * nofobservations ,int *总计,int * nofseries,float *结果) 这是我所在的python代码面临的问题: nofseries = c_int(len(nofobservations)) noftree = c_int(terminal.shape [1] ) nofnode = c_int(nodestatus.shape [0]) total = c_int(np.sum(nofobservations,dtype = np.int64)) nofentry = ctypes.POINTER(ctypes.c_float *(len(nofobservations)* nofterminal * terminal.shape [1]))() mydll.generate_codebook.argtypes = [POINTER(c_int),POINTER(c_int),POINTER(c_int),POINTER(c_int), POINTER(c_int),POINTER(c_int),POINTER(c_int),POINTER(c_int),POINTER(c_float)] result = mydll.generate_codebook(nodestatus.ctypes.data_as(ctypes.POINTER(ctypes) .c_int)), nofnode,noftree,terminal.ctypes.data_as(ctypes.POINTER(ctypes.c_i) nt)), c_int(nofterminal), nofobservations.ctypes.data_as(ctypes.POINTER(ctypes.c_int)),总计, nofseries, ctypes.byref(nofentry) )) 在调用generate_codebook函数时,我遇到的最后一个参数中的参数错误是预期的LP_c_float实例。以下是错误: < ipython-input-28-f73a7383211e>在generatecodebook(nodestatus,terminal,nofterminal,nofobservations)中 16 nofobservations.ctypes.data_as(ctypes.POINTER(ctypes.c_int)),total, 17 nofseries, ---> 18 ctypes.byref(nofentry)) ArgumentError:parameter 9:< class'TypeError'> ;:预期的LP_c_float实例而不是指向LP_c_float_Array_50000的指针 我经历了此问题的解决方案,但无法解决错误。 预先谢谢您!解决方案您的 nofentry 值是指向数组的指针 float 的值,而 generate_codebook 需要一个指向 float 的指针。 ctypes 无法自动进行此类转换,因此必须手动执行(使用 [Python 3]:ctypes。 cast ( obj,类型))。 示例:Translated to your code:Change nofentry definition to:nofentry = (ctypes.c_float * (len(nofobservations) * nofterminal * terminal.shape[1]))() # Notice dropping `ctypes.POINTER`When invoking mydll.generate_codebook, replacectypes.byref(nofentry)withctypes.cast(nofentry, ctypes.POINTER(ctypes.c_float))so at the end it will look like:result = mydll.generate_codebook(nodestatus.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), nofnode, noftree, terminal.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), c_int(nofterminal), nofobservations.ctypes.data_as(ctypes.POINTER(ctypes.c_int)), total, nofseries, ctypes.cast(nofentry, ctypes.POINTER(ctypes.c_float))) 这篇关于ArgumentError:预期的LP_c_float实例,而不是指向LP_c_float_Array_50000的指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云! 07-25 05:53