【发布时间】:2020-07-07 15:00:13
【问题描述】:
我有一些用 python 包装的 C 代码。作为此代码的一部分,它会生成一个指向 2D 字符数组的指针(较大表中的字符串对)。
我想要一种在 python 中生成兼容表并将指针传递给 C 的方法。该点需要是 LP_LP_char_p 类型,并且需要能够被引用为 ptr[2][1] 或类似的。
【问题讨论】:
我有一些用 python 包装的 C 代码。作为此代码的一部分,它会生成一个指向 2D 字符数组的指针(较大表中的字符串对)。
我想要一种在 python 中生成兼容表并将指针传递给 C 的方法。该点需要是 LP_LP_char_p 类型,并且需要能够被引用为 ptr[2][1] 或类似的。
【问题讨论】:
我创建了一些有效的代码,所以我在这里发布:
从 ctypes 导入 POINTER、指针、c_char、c_char_p、addressof、cast
rows = 13
cols = 2
line_len = 12
type_char_p = POINTER(c_char_p)
type_char_pp = POINTER(POINTER(c_char_p))
char_p_array = ((c_char_p * cols) * rows)()
char_pp_array = (type_char_p * rows)()
for i in range(rows):
for j in range(cols):
char_p_array[i][j] = f'msg {i} {j}'.encode('raw_unicode_escape')
char_pp_array[i] = char_p_array[i]
p = cast(char_pp_array, type_char_pp)
In: p
Out: <__main__.LP_LP_c_char_p at 0x28acdb477c8>
In: p.contents.contents.value
Out: b'msg 0 0'
In: p[0][0]
Out: b'msg 0 0'
In: p[1][1]
Out: b'msg 1 1'
【讨论】: