2016-10-24 19 views
1

私は、独自のヘッダファイルとともに出荷されているコンパイル済みCライブラリ用のSwiftラッパー/インタフェースを構築しています。私は以下の点を除いて、すべての機能を持っています。ライブラリは、ロードされたファイルのヘッダの特定の部分を読み込みます。Swift構造体へのCポインタの値を取得するにはどうすればよいですか?

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

、それが読めるファイル(特定のメタデータの一部で、正確には絵)が与えられたときUnsafePointer<Int8>ポインタを返すと、ライブラリ内の関数:私はこのようになります構造体を持っています。

私の質問はです:どのようにその種類の構造体に与えられたメモリ位置のデータを割り当てることができますか?

私はこの種の構造体にメモリ内のスペースを割り当てたいと思いますが、それまでは私はできませんでした。

私はプログラミングに比較的新しいので、私は何かが欠けているか、少なくとも私は何か基本的なものを見逃しているということは肯定的です。聞くことを決める前に、今何日も見ていました、あらかじめありがとう!私が正しくあなたの質問を理解していれば

答えて

1

は、あなたはT_PICTURE構造を含むメモリ場所を指す
ptr: UnsafePointer<Int8>を持っています。

スウィフト2あなたは単にポインタを "再作成"してそれを尊重することができます。指摘-に これは、データをコピーするタイプT_PICTUREptrpicture変数によって:

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:あなたは大歓迎です、そして、ようこそ! –

関連する問題