การตัดอาร์กิวเมนต์ struct** (ตัวชี้ไปยังตัวชี้) ด้วย SWIG

ฉันกำลังพยายามรวมฟังก์ชันที่เขียนด้วยภาษา C เพื่อให้ฉันสามารถเข้าถึงได้ใน Python โดยใช้ SWIG

ปัญหาที่ฉันมีคือคาดว่าตัวชี้ไปยังตัวชี้ไปยังโครงสร้าง ไม่ใช่ตัวชี้ไปยังโครงสร้าง เช่น

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 ธรรมดาที่ประกอบด้วย ints, floats, arrays ฯลฯ

แต่ฉันไม่สามารถทราบวิธีรับตัวชี้ไปที่ hash_tracks ที่ฉันต้องการเป็นอาร์กิวเมนต์ของฟังก์ชันแรก (นั่นคืออันที่ฉันพยายามจะตัด)

เหตุผลที่ฉันต้องการอาร์กิวเมนต์ track_t** (ไม่ใช่แค่อาร์กิวเมนต์ track_t*) ก็คือ hash_tracks เป็นตารางแฮช (โดยใช้ไลบรารี uthash) และด้วยเหตุนี้ตัวชี้ไปยังตาราง track จึงสามารถเปลี่ยนแปลงได้เมื่อฟังก์ชันเพิ่มและลบโครงสร้าง track_t ภายในการดำเนินการ

ฉันสับสนว่าจะเรียกใช้ฟังก์ชันดังกล่าวจาก python ได้อย่างไร บางทีฉันอาจจำเป็นต้องใช้ฟังก์ชัน 'ตัวช่วย' ใน C หรือใช้แผนผังประเภท SWIG บางอย่างเพื่อให้เป็นไปได้


person bph    schedule 26.10.2015    source แหล่งที่มา


คำตอบ (1)


ฉันคิดว่าคุณต้องการใช้แผนผังพิมพ์ INOUT ซึ่งมีเอกสารอยู่ที่นี่:

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

person Devan Williams    schedule 27.10.2015