2011-06-20 1 views
4

BitmapDataのプロパティはReservedで、32ビットのを返します。 Microsoftのドキュメントでは、このプロパティを使用しないように指示しています。私たちがそれを使うべきでないならば。それはなぜそこにあるのですか?それは正確に何のためですか?BitmapData.reservedとは何ですか?

+3

「今後の使用」です。まだ使用されるのを待っている非常に古いものがいくつかあります。 –

答えて

4

予約済みのフィールドとプロパティは、さまざまな用途に使用できます。かなり一般的な使い方は、現在の構造が提供していない種類の情報を、より洗練されたタイプのBitmapDataが将来格納する必要がある可能性を可能にすることです。何も予約されたフィールドを誰も使用していない場合、将来の実装では、そのフィールドを使用して、追加の情報を含む別の構造体へのポインタまたはハンドルを保持できます。

+0

プロパティ "予約済み"を呼び出す際のポイントは何ですか?または、後で名前が変更される可能性があります。フィールドは、基礎となる構造体に空きがあることを確認するためだけに存在しますか? – JAB

+1

以前に見たパターン(Microsoftからは必ずしもそうではありませんが)に従うと、後でBitmapDataEx型があるかもしれません。これはBitmapDataと同じですが、「予約済み」だったフィールドは別の名前おそらくタイプしてください)。 Reservedフィールドがゼロに初期化されたままであれば、BitmapDataExへのポインタを期待するコードはBitmapDataへのポインタが与えられれば正常に動作します。 – supercat

+1

...将来必要なときに予約されているためです。 –

1

マイクロソフトの古いAPIには多くのものがあります。これらは、将来の開発作業のためにプロパティセットにスペースを入れるのが一般的だった時から始まります。彼らは誰も押さなければならない大きな赤いボタンと同じ目的を果たします。多分誰かが将来ボタンを望むでしょうし、そして、まあ、私たちは既にこのボタンをここに持っています!

3

興味深いことに、それはバグです。実際にはIntPtrです。ネイティブ宣言、SDKのGdiPlusImaging.hヘッダーファイル(VS2008ではc:\ program files \ microsoft sdks \ windows \ v6.0a \ includeディレクトリ)から知ることができます。 GDI +がインスタンスを作成するため、バグはバイトではありません。

これは、フィールドにポインタまたはハンドルが格納されている可能性が高くなります。私はメモリマップされたファイルオブジェクトハンドルを推測します。 UnlockBits()関数でそれを見つけるために辞書を維持しなければならず、クライアントの状態オブジェクトに格納するほうが安い。それを台無しにしないでください。

関連する問題