2016-10-24 72 views
1

我正在爲一個預編譯的C庫構建一個Swift包裝器/接口,這個C庫隨附其自己的頭文件。除了以下內容,我還有其他所有功能。該庫讀取已加載文件標題的給定部分。我有一個結構,看起來像這樣:我怎樣才能得到一個C指針的值到一個Swift結構?

typedef struct { 
    DWORD width; 
    DWORD height; 
    DWORD length; 
    const void *data; 
} T_PICTURE; 

,並表示庫中的函數時,它被賦予一個可讀的文件(特定的元數據的一部分,圖片是精確的)返回一個指針UnsafePointer<Int8>

我的問題是:我如何能夠將給定內存位置的數據分配給這種結構?

我想將內存中的空間分配給這種結構,但到目前爲止我一直無法。

我很積極,因爲我對編程比較陌生,所以我錯過了一些至關重要的東西,或者至少我沒有看到根本的東西。在決定詢問之前已經四處尋找好幾天了,謝謝您!

回答

1

如果我理解你的問題正確,那麼你有一個
ptr: UnsafePointer<Int8>指向包含一個T_PICTURE結構的存儲位置。

Swift 2你可以簡單地「改寫」指針並遵守它。 這將複製的數據指出,通過ptrT_PICTURE類型的picture變量:

let picture = UnsafePointer<T_PICTURE>(ptr).memory 

斯威夫特3你必須 「重新綁定」 指針:

let picture = ptr.withMemoryRebound(to: T_PICTURE.self, capacity: 1) { 
    $0.pointee 
} 

有關新指針轉換 API的更多信息,請參見UnsafeRawPointer Migration

+0

非常感謝!多年來一直在這裏,剛剛簽約提出這個問題,因爲這確實是一件難事。簡直不敢相信我的第一個問題得到如此迅速的迴應並取得了良好的成功乾杯! – drummingdemon

+0

@drummingdemon:不客氣,歡迎來到SO! –

相關問題