2012-03-19 23 views
1

我想在Windows上使用SWIG來構建64位應用程序。我有一個類有一個指向緩衝區的指針,因爲我想與.NET類接口,指針被聲明爲intptr_t如何使SWIG在Windows上使用intptr_t的64位整數

的問題是,標準SWIG stdint.i假定intptr_t要麼int(在32位的環境)或long(在64位的環境)。雖然在Unix上這是真的,但它在Windows上是錯誤的。有沒有人有類似的經驗或任何想法如何爲此創建一個解決方法?

我已經設置了intptr_t =>IntPtr轉換所需的類型映射,它在32位環境中工作正常,但它在64位環境中截斷了指針。

回答

0

好的,我會回答我自己的問題。看起來這是Windows上的SWIG中的一個錯誤,它在64位Windows上將long視爲int64,而實際上它是int32。查看更多有關這個話題在這裏: What is the bit size of long on 64-bit Windows?

的另一個問題SWIG是,它區分32位和64位代碼,但我用intptr_t的原因是爲了避免位數的問題,因爲根據定義,它提供了大量的整數足以拿一個指針。

所以我做了什麼,在年底寫的,我產生了包裝固定類型簽名從intintptr_t後運行的腳本。雖然這並不優雅,但由於我的Python和PHP包裝的其他原因,我必須這樣做。

相關問題