hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
構造体とは複数の異なるビット列のデータを1つのデータ型として定義したものです。
詳しい説明はちょくとさんのところで^^;
ちょくとさんのトップページ下部にはサイト内ワード検索が出来る入力ボックスがあるので「構造体」として検索すればサイト内の関連ページがいろいろ出てきます。
これを私kz3は「ちょこっと検索ボックス」と名づけました。(ちょくとさん見てるかな。´ロ`)
通常の構造体のサイズはメンバのバイト数とパディングを考慮すれば構造体のサイズは計算できます。
簡単なものとしてRECT構造体を見てみよう。
1
2
3
4
5
6
| - | | | | ! |
|
LONG型は32ビット(4バイト)なので全体で16バイトですね?この構造体をHSPで作るには、
1 |
|
とします。sdimではだめなのでしょうか?
sdimでもいけますがメモリへのアクセス方法が変わってきます。
dimは要素へのアクセスに添え字を使えますがsdimには使えません。
dimでは1要素32ビットなのでrect構造体の各メンバへアクセスするのに好都合というわけです。
しかし構造体の中には16ビットや8ビットのメンバが混在しているものもあります。
そういう時はsdimでメモリを確保しますがこちらは添え字によるアクセスは出来ない(1次元配列の場合)のでメモリ読み書き命令(関数)を使ってアクセスします。
(普通の)構造体はサイズが固定です。
これに対して可変長構造体とは構造体のサイズが可変。不変ではないのです。変わるのです。
実行時にプログラマが構造体のサイズを増やしたり減らしたりして使います。
といっても制限なしに増やせるわけではありませんし、ベースとなる構造体のサイズ未満にすることはできません。
構造体の最後のメンバに限ってそのメンバのサイズを構造体の後ろのメモリに伸ばしていけるのです。
構造体の途中のメンバのサイズを増やしていったらそれ以降のメンバのオフセットが変わってしまいますものね?
ここでは例としてパレット設定で使っているLOGPALETTE構造体について説明します。(ただし、パレット設定では実際はPALETTEENTRY構造体の配列だけあればいいのです・・・。)
1
2
3
4
5
| - | | | ! |
|
1
2
3
4
5
6
| - | | | | ! |
|