ฉันกำลังพยายามรวมฟังก์ชันที่เขียนด้วยภาษา 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 บางอย่างเพื่อให้เป็นไปได้