我正在尝试使用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文档没有帮助
答案 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*
。