将ctypes数组传递给C函数时出现ArgumentError

时间:2019-05-22 21:55:01

标签: python-3.x wrapper ctypes

我正在尝试使用C函数copyDataContent,该函数将我用指针DataHandle指向的C结构对象的浮点数据复制到浮点指针给定的位置。我已经包括了该函数的函数原型。我可以通过库中的另一个函数获取此数据的维数。我的代码在下面。

copyDataContent的原型

void copyDataContent(DataHandle DataSource, float* Destination);

这是哪里出了问题:

data = createData()
size0 = getDataPropertyInt(data,0)
size1 = getDataPropertyInt(data,1)
arrC = C.POINTER(C.c_float*size0*size1)
libc.copyDataContent.argtypes = [DataHandle,C.POINTER(C.c_float)]
libc.copyDataContent(data,arrC)

控制台输出:

ArgumentError: argument 2: <class 'TypeError'>: expected LP_c_float instance instead of _ctypes.PyCPointerType

^从我实际调用copyDataContent的行开始

但这是控制台告诉我的arrC

arrC
Out[88]: __main__.LP_c_float_Array_0_Array_0

任何人都可以弄清发生了什么事吗? ctypes文档没有帮助

1 个答案:

答案 0 :(得分:0)

services.AddTransient<MyService1>(); services.AddScoped<MyService2>(); services.Configure<MyServiceOptions<MyService1>>(Configuration.GetSection("MyService1Settings")); services.Configure<MyServiceOptions<MyService2>>(Configuration.GetSection("MyService2Settings")); 创建一个 type 而不是一个实例。

如果要使用数组的实例,请使用arrC = C.POINTER(C.c_float*size0*size1)

要将其传递给arrC = (C.c_float*size0*size1)()参数,请使用float*