掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TIFFのビット深さ(ビット)、ページ数をGDI+で表示させるには? (ID:143391)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> サンプルの解説、大変ありがとうございます。 GdipGetPropertyItem の動作は複雑なので、ここでは説明を省いています。 もしも興味があれば、先に紹介した URL の解説を読んでみてください。 (中級者以上向けに書いた文章なので、分かりにくいかも知れませんが…) http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200709/07090026.txt > なるほど、これまで引数に直接サイズやら値が入力されていると思っておりましたが、先に戻り値で返されているのですね。無知でした。 戻り値では無く、引数で値を返しています。 今回の場合、サイズ等が返されるのは ByRef 引数の部分であって、 戻り値で返されるわけではありません。 「戻り値」が返すのは、関数が正常に実行されたかどうかを表す値ですね。 (0 なら正常、0 以外はエラー内容を示すコード値) GdiplusStartup の最初の引数や GdipGetImageWidth の最後の引数では、 「変数に値をセットしてから API に渡す(入力引数)」という動作ではなく、 「変数を API に渡すと、API がその変数の値を書き換える(出力引数)」 という動作になっています。 >> API に不正なファイルなどを指定するとエラーになるため、 > エラーに陥った際、戻り値を変数に受け取っていない場合は、 > マクロが停止してしまうのでしょうか? > つまりはBitmapオブジェクトを破棄する"GdipDisposeImage pSrcBmp"の処理以前に止まるとはこのことなのでしょうか? いいえ、戻り値を得ているかどうかは、その話とは別の問題です。 また、API がエラー値を返した(0以外の値を返した)というだけでは、 VBA のコードが勝手に停止することもありません。 エラー値(0 以外の値)を返した時の振る舞いを決めるのは、 > If GdipCreateBitmapFromFile(ByVal StrPtr(srcPath), pSrcBmp) <> 0 Then とか、 > lngErrorCode = GdipCreateBitmapFromFile(ByVal StrPtr(srcPath), pSrcBmp) > If lngErrorCode <> 0 Then といった場合のコードを指しています。ここまではよろしいでしょうか。 GdipCreateBitmapFromFile が成功して、pSrcBmp にオブジェクト値がセットされたなら、 必ず GdipDisposeImage を呼び出して、pSrcBmp が指すオブジェクトを破棄せねばなりません。 逆に言えば、GdipCreateBitmapFromFile の呼び出しが失敗していた場合は、 そもそも GdipDisposeImage を呼び出す必要が無いとも言えます。 その意味で、GdipCreateBitmapFromFile の成否を確認するために、戻り値は 必ず調べておかなくてはなりません。それに、画像の読み込みに失敗していた場合は、 その後のサイズ取得などの処理を行わないようにしなければなりませんしね。 これは GdiplusStartup も同様です。呼び出しが成功して lngToken に値がセットされた場合には、 必ず GdiplusShutdown に lngToken を渡して呼び出し、終了処理せねばなりません。 その一方で、GdipGetImageWidth 等に関しては、こうした後始末処理を必要としていません。 つまり、サイズの取得に成功しようと失敗しようとメモリリークとはならないため、これらは 戻り値を調べなかったとしても、さほど問題はありません。もっとも、正しいサイズが 得られたかどうかを保証したいなら、念のために戻り値を確認しておいた方が良いのですが。 > これらの処理以前に止まるとはこのことなのでしょうか? API の動作と言うよりは、VBA 側のコード停止を指しています。 たとえばコードの強制終了ボタン■を押した場合や、あるいは、 実行時エラー等でコードの実行を中断→停止させたような状況です。。 なお、実行時エラーというのは下記のようなエラーのことです。 「型が一致しません」 「0 で除算しました」 「インデックスが有効範囲にありません」 「オーバーフローしました」 「インデックスが有効範囲にありません」
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.