|
■No9082 (masami さん) に返信 > エラーがでない時もCatchしてないってことですか? > でも処理はちゃんとされますけど。。。 > そのPCにVS2005が入ってないのでPGを動かしながら確認ができないのですが。。。
たとえば(AutoCADなどへの)オートメーション操作を行っているのであれば、 その CAD 側がビジー状態だったり、強制終了されていれば、例外が発生するはずです。
たとえば当方では下記コードにおいて、Excel 2007 操作時に RPC_E_CALL_REJECTED が発生しました。
Imports System Imports System.Runtime.InteropServices Public Class Sample Public Shared Sub Main() Dim o As Object = Nothing Try o = CreateObject("Excel.Application") o.Visible = True MsgBox("Excel側で[ファイルを開く]ダイアログを表示させ、" & vbCrLf _ & "そのダイアログが開かれた状態のまま、" & vbCrLf _ & "このメッセージボックスの OK ボタンを押してください。", _ vbSystemModal, "実験") o.Quit() MsgBox("正常終了", vbInformation, "問題なし") Catch e As COMException When e.ErrorCode = &H80010001 MsgBox(e.ToString(), vbExclamation, "RPC_E_CALL_REJECTEDが発生") Catch e As Exception MsgBox(e.ToString(), vbExclamation, "その他のエラー発生") Finally If Not o Is Nothing AndAlso Marshal.IsComObject(o) Then Marshal.ReleaseComObject(o) End If End Try End Sub End Class
Excel でいえば、「セルに値を入力中」「長い再計算処理の最中だった」などなど、 通信先が応答できない状況というのは常にありえるので、それらはきちんと Catch して、 必要であれば、如何にリカバリすべきか、アプリケーション設計者が決めておかねばなりません。
# リカバリの方法としてはたとえば、「エラー扱いにして処理を中断する」「数秒後に再試行する」 # 「無視して次の処理を続ける」「中止/再試行/無視のダイアログを出してユーザに決めさせる」など。
|