構造体のアラインメントについて
Posted: 2005年11月20日(日) 19:32
api_commdlg.sbp内に定義されている構造体で、本来はアラインメントを必要とするが、特別にアラインメントを無視しなければならない構造体(PRINTDLGなど)が存在します。
例えば、
Print SizeOf(PRINTDLG)
としたときに、本来であれば、アラインメントが適応された68が返るはずのところを、アラインメントを無効にした66が返るという仕様にWin32APIで決められているからです(なんでこうしたんだろ??)。
このような特殊な構造体に対応するため、次回のバージョンアップでAlign修飾子を用意することにしました。書き方は書きの通り。
Alignのあとの括弧の中にアラインメントを何バイト境界でとるのかを強制的に指定します。アラインメントを無効にするときは、1バイト境界にあわせるだけです。
このような書き方は特別な例を除き、ほとんどありませんので、皆さんはあまり気にされなくて大丈夫かと思います。
取り急ぎ、バージョンアップ前のご報告まで。
例えば、
Print SizeOf(PRINTDLG)
としたときに、本来であれば、アラインメントが適応された68が返るはずのところを、アラインメントを無効にした66が返るという仕様にWin32APIで決められているからです(なんでこうしたんだろ??)。
このような特殊な構造体に対応するため、次回のバージョンアップでAlign修飾子を用意することにしました。書き方は書きの通り。
コード: 全て選択
Type Align(1) PRINTDLG
...
End Type
このような書き方は特別な例を除き、ほとんどありませんので、皆さんはあまり気にされなくて大丈夫かと思います。
取り急ぎ、バージョンアップ前のご報告まで。