2015-08-24 55 views
0

我有一個C函數,它返回一個結構數據類型,其中包含多個項目(size_t,char *,int,unsigned和其他結構)。當我調用這個函數時,python中沒有輸出。一些谷歌搜索後,我認爲問題是我沒有在我的接口文件中聲明數據類型。但事實證明這並不容易。什麼是正確的方法:typemaps或只是一個簡單的typedef從Python的C函數通過SWIG返回結構數據類型

有人可以幫助我嗎?

回答

2

您需要%首先包含標題。您也需要嵌套結構的頭文件,具有相關性順序!

完成之後,Swig應該自動包裝結構,以便對函數的調用將返回具有相應成員的代理對象。

當您想要更改Swig的默認行爲時,typemap適用於此類型。

+0

是否真的有必要定義返回數據類型,還是僅僅需要如果我想進一步處理返回值?我的情況應該發生什麼如果我只是調用函數,而不指定任何返回值,就像'example.foo()'? – Maximilian

+0

所以,你說我不必在接口文件中包含頭文件時在接口文件中初始化結構體? – Maximilian

+1

我認爲Swig在這裏工作可能存在某種誤解。 Swig會讀取並理解你的C文件,併發出相應的Python函數。因此,如果您給Swig一個返回結構的C Python,它將編寫一個Python函數,該代碼返回該結構的實例的代理。很顯然,如果你丟棄Python中的返回值而不是存儲它,該實例將被垃圾收集。 「初始化結構體」沒有任何意義--Swig將默認情況下的所有內容都包裝在%include中,並且在運行時根據需要構造實例。 – Borealid