使用 SWIG 包装结构**(指向指针的指针)参数
Wrapping struct** (pointer to pointer) arguments with SWIG
我正在尝试包装一个用 C 编写的函数,以便我可以使用 SWIG
在 Python 中访问它
我遇到的问题是它需要一个指向结构指针的指针,而不是指向结构的指针,例如
int update_tracks(track_t **hash_tracks);
如果是:
int update_tracks(track_t *hash_tracks);
我没有问题,因为我可以创建参数并从 python 调用函数,如下所示:
hash_tracks = track_t()
n = update_tracks(hash_tracks)
track_t 是一个简单的 C 结构,包含一些整数、浮点数、数组等。
但我不知道如何获取指向 hash_tracks
的指针,我需要它作为第一个函数的参数(即我实际尝试包装的函数)
我需要一个 track_t** 参数(不仅仅是一个 track_t* 参数)的原因是 hash_tracks 是一个散列-table(使用 uthash库),因此指向轨道 table 的指针可以随着函数在其实现中添加和删除 track_t 结构而改变。
我不知道如何从 python 调用这样的函数。也许我需要在 C 中实现一些 'helper' 函数或使用一些 SWIG 类型映射来实现它?
我想你想使用 INOUT 类型映射,在此处记录:
我正在尝试包装一个用 C 编写的函数,以便我可以使用 SWIG
在 Python 中访问它我遇到的问题是它需要一个指向结构指针的指针,而不是指向结构的指针,例如
int update_tracks(track_t **hash_tracks);
如果是:
int update_tracks(track_t *hash_tracks);
我没有问题,因为我可以创建参数并从 python 调用函数,如下所示:
hash_tracks = track_t()
n = update_tracks(hash_tracks)
track_t 是一个简单的 C 结构,包含一些整数、浮点数、数组等。
但我不知道如何获取指向 hash_tracks
的指针,我需要它作为第一个函数的参数(即我实际尝试包装的函数)
我需要一个 track_t** 参数(不仅仅是一个 track_t* 参数)的原因是 hash_tracks 是一个散列-table(使用 uthash库),因此指向轨道 table 的指针可以随着函数在其实现中添加和删除 track_t 结构而改变。
我不知道如何从 python 调用这样的函数。也许我需要在 C 中实现一些 'helper' 函数或使用一些 SWIG 类型映射来实现它?
我想你想使用 INOUT 类型映射,在此处记录: