• ベストアンサー

例外ってIf文の中に入れますか?If文の外でTry...Catchしますか??

例外ってIf文の中に入れますか?If文の外でTry...Catchしますか?? Sub Cal(By Val Data As String)  If ( Flag = "hoge") Then  Total = js.Eval(Work)  End If End Sub それと、”エラーコードをテキストの説明に変換する”FormatMessage関数を使おうと思っています。 「例外処理 = FormatMessage関数」という図式は古いですか?いまはもっと違う方法ですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

FormatMessage関数を初めて聞いたので突っ込まなかったのですが、ちょっと調べてしました。 http://msdn.microsoft.com/ja-jp/library/cc428939.aspx Win32APIを利用した関数なんですね。 戻り値が存在していろいろできるみたいですね。 ・関数が成功すると、バッファに格納されたバイト数(Unicode 版の場合は文字数)が返ります(終端のNULLを文字除く)。 ・関数が失敗すると 0 が返ります。拡張エラー情報を取得するには、 GetLastError 関数を使います。 調べた結果ですが、これを必要とするのであれば使ってもいいと思います。 但し、例外処理でメッセージを出したいだけであれば MessageBox.Show を使ってしまうと思います。

rescue98
質問者

お礼

ありがとうございます。 関数が失敗すると、コンパイラがそのエラー情報をコードではなく、 文字列にして説明してくれるらしいです。 FormatMessageがあまり使われないことがわかって、大変為になりました。

その他の回答 (2)

回答No.2

サンプルに載ったコードを見る限りだとIFの外にTry-Catchを書きます。 ■理由 この変数「Flag」の型がわからない為、例外を発生させる可能性がある。 多分、文字列のメンバ変数であろうと予想はできますが確証が持てないので・・・。 また、Try-Catchに関してですが、基本的には外で書きたい派です。 予想できる例外なんて実装の時点で対応するべきで、例外と考えませんし・・・。

rescue98
質問者

お礼

ありがとうございます。 「予想できる例外なんて実装の時点で対応するべきで、例外と考えません」 かっこいいw 簡単な電卓なので、Flagの型に変な型入らないです。 Eval()の上下を囲むことに決意しました。

rescue98
質問者

補足

ところで、FormatMessage関数を使うのは間違いですか? MessageBox.Show("あなたは禁断の0除算を行いました")を使いますか???

回答No.1

If文の中か外かはまったく気にしません。 あくまで「必要な場合に必要な範囲で」使います。 あと,Try - Catchはあまり使いません。 ref: むやみにキャッチしないでね。ゴールキーパー以外はハンドで反則ですよ。 - NAL-6295の舌先三寸 http://d.hatena.ne.jp/NAL-6295/20050909/p1

rescue98
質問者

お礼

あがとうございます。 0除算のときに例外処理を書きたいと思っています。 Try...Catchだと、ポップアップを出して処理が終了してしまうんですか。 まあ、処理が終了してくれていいんですけど。 Try-Finallyで、ポップアップして処理を抜け出すようにしたいです。 出来ますか? Throwしたらまずいですよね・・・無い方がましかも。

rescue98
質問者

補足

ところで、FormatMessage関数を使うのは間違いですか? MessageBox.Show("あなたは禁断の0除算を行いました")を使いますか???

関連するQ&A