ctypes:修改作为库函数参数传递的结构内的数组

时间:2018-03-20 07:47:39

标签: python ctypes

[请注意,这是一个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

我不确定:

  1. 如何从python端bytearray初始化bb;

  2. 如果修改bb(输出数组)的内存时出现问题;

  3. 是否在python端或C端设置aabbcc(确实有初始化例程);和,

  4. argtypes是否应为POINTERSaabbcc是否应使用ctypes.pointer()ctypes.byref()传递或者只是作为自己。

  5. 非常感谢。

0 个答案:

没有答案