[请注意,这是一个ctypes
特定问题。]
从ctypes: extract members of structure returned by C library开始,我正在尝试使用ctypes
中的python3
来安排DLL(我无权访问源代码)来填充数组在作为参数传递给特定函数的结构中。
该功能的C原型是
int func(a * aa, b * bb, c * cc);
和C结构如下:
typedef struct
{
int a1;
}a;
typedef struct
{
int b1;
unsigned char *b2;
}b;
typedef struct
{
int c1;
unsigned char *c2;
}c;
当我在python端调用func时,即
func.argtypes = (ctypes.POINTER(a),\
ctypes.POINTER(b),
ctypes.POINTER(c))
func.restype=ctypes.c_int
status=dll.func(aa,bb,cc)
status
返回1
而不是0
,因此可能不会成功。
我无法使bb
成为指针,因为我得到了:
ValueError: ctypes objects containing pointers cannot be pickled
我不确定:
如何从python端bytearray初始化bb
;
如果修改bb
(输出数组)的内存时出现问题;
是否在python端或C端设置aa
,bb
,cc
(确实有初始化例程);和,
argtypes是否应为POINTERS
,aa
,bb
和cc
是否应使用ctypes.pointer()
,ctypes.byref()
传递或者只是作为自己。
非常感谢。