[リストへもどる]
一括表示

タイトル64bit 版 Susie Plug-in について
記事No2152
投稿日: 2014/11/29(Sat) 20:55
投稿者pute
TORO様の公開されている WIC Susie Plug-in のソースに関して質問があります。

構造体 PictureInfo や FileInfo について、テキストやソースを読むと、
「アラインメントのため」というコメントとともにダミーの char 配列が入っていますが、この部分の意図がわかりません。
特に SUSIE_FINFO のコメント、
> // 64bit版の構造体サイズは444bytesですが、実際のサイズは
> // アラインメントにより448bytesになります。環境によりdummyが必要です。
は、明らかに間違っています。#pragma pack(push,1) を宣言している以上、SUSIE_FINFO はアラインされず、「実際のサイズ」は 444 バイトのはずです。
配列にしたときに、オフセットを 8 バイト境界に揃えるためでしょうか?

ちょっと気になったので質問させていただきました。
不躾でしたら申し訳ありません。
よろしくお願いいたします。


タイトルRe: 64bit 版 Susie Plug-in について
記事No2153
投稿日: 2014/11/30(Sun) 13:10
投稿者TORO
PictureInfo は hInfo のアラインメントのため、
FileInfo は主に配列として扱うので全体のアラインメントのためですね。

#pragma pack と char による位置揃えを使っているのは、
デフォルトアライメントが変更されて、意図しないずれが起きないように
するためと、
別の言語に宣言を移植したときにトラブルが起きないようにするためです。


タイトルRe^2: 64bit 版 Susie Plug-in について
記事No2154
投稿日: 2014/11/30(Sun) 15:57
投稿者pute
ご丁寧にありがとうございます。納得です。
あともう一つ、別の質問といいますか確認だけ。

32bit 版にしろ 64bit 版にしろ、IsSupported の引数 dw の正体は上位ワードで判定するようになっていますよね。
プロセス内にファイルハンドルが大量に存在すると、ファイルハンドルの値が上位ワードに食い込んでくることがあります。これは無視といいますか、普通そんなことはないから気にするな、ってことでいいんでしょうか。

引数で渡ってきたものがポインタなのかハンドルなのか、何か判定する方法があればいいと思うんですが……。


タイトルRe^3: 64bit 版 Susie Plug-in について
記事No2155
投稿日: 2014/11/30(Sun) 23:39
投稿者TORO
ここがまずいのは確かですが、Susie Plug-in としてのソース互換を
維持するために変えていないですね。

そもそも Susie Plug-in API が 16bit Windows 時代の仕様を引きずって
いて、当時の事情に適した作りになっているので、いまでは色々まずい所が
ありますね。

使うアプリケーション側がファイルハンドルを渡さず、メモリイメージを
渡す運用にすれば、とりあえず回避できますし。


タイトルRe^4: 64bit 版 Susie Plug-in について
記事No2156
投稿日: 2014/12/01(Mon) 05:47
投稿者pute
まったくその通りですね。
プラグイン側で対処のしようがないことは問題ですが、実際のところ IsSupported でファイルハンドルを渡すソフトは見たことがないですし。
個人的にはなんとなく気持ち悪いので、VirtualAlloc で位置を指定して確保したメモリを渡すようにしてます。
これなら最上位の nibble が立っているようにできますので。

ご丁寧な回答、どうもありがとうございました。