Membungkus argumen struct** (pointer to pointer) dengan SWIG

Saya mencoba untuk membungkus fungsi yang ditulis dalam C sehingga saya dapat mengaksesnya dengan Python menggunakan SWIG

Masalah yang saya miliki adalah ia mengharapkan sebuah pointer ke sebuah pointer ke sebuah struct, bukan sebuah pointer ke sebuah struct, mis.

int update_tracks(track_t **hash_tracks);

jika itu:

int update_tracks(track_t *hash_tracks);

Saya tidak akan mengalami masalah karena saya dapat membuat argumen dan memanggil fungsi dari python sebagai berikut:

hash_tracks = track_t()
n = update_tracks(hash_tracks)

track_t adalah struct C sederhana yang berisi beberapa int, float, array, dll.

tetapi saya tidak tahu cara mendapatkan penunjuk ke hash_tracks yang saya perlukan sebagai argumen untuk fungsi pertama (yaitu fungsi yang sebenarnya saya coba bungkus)

Alasan saya memerlukan argumen track_t** (bukan hanya argumen track_t*) adalah karena hash_tracks adalah tabel hash (menggunakan perpustakaan uthash) dan dengan demikian penunjuk ke tabel track dapat berubah seiring fungsi menambah dan menghapus struct track_t dalam implementasinya.

Saya bingung bagaimana memanggil fungsi seperti itu dari python. Mungkin saya perlu mengimplementasikan beberapa fungsi 'pembantu' di C atau menggunakan beberapa peta tipe SWIG untuk memungkinkannya?


person bph    schedule 26.10.2015    source sumber


Jawaban (1)


Saya rasa Anda ingin menggunakan peta tipe INOUT, yang didokumentasikan di sini:

http://www.swig.org/Doc2.0/Arguments.html#Arguments_nn6

person Devan Williams    schedule 27.10.2015