我有一个需要char const **参数的 C 库函数,例如:
void set_values(void* object, char const ** values, int dim1, int dim2);
where是一个指向空终止字符串值values的长度数组。dim1*dim2
当我尝试使用 cffi/ctypes 调用此函数时,下面的 Python 代码会导致错误:
LP_c_char = ctypes.POINTER(ctypes.c_char)
dim1 = 2
dim2 = 3
values = ('1.0', '2.0', '1.2', '2.2', '1.5', '2.5')
values_ptr = (LP_c_char * (dim1 * dim2))()
for i, value in enumerate(values):
values_ptr[i] = ctypes.create_string_buffer(value.encode('utf-8'))
mylib.set_values(object, values_ptr, dim1, dim2)
结果是以下错误mylib.set_values(...):
TypeError: initializer for ctype 'char * *' must be a cdata pointer, not LP_c_char_Array_6
遗憾的是values不能是double*数组,因为库接受变量名和表达式。
我正在关注这个旧线程。我正在使用 Python 3.7.2 和 cffi 1.14.0。
有人可以指出我在这里做错了什么吗?