私の現在のプロジェクトはうまくいっているので、正気な人のように、わざと壊そうとしています。1 つの可能性として、一部のリソースが失われる可能性があります。実行フォルダーに dll を入れるのを怠ると、アプリケーションが見事にクラッシュします。
リソースの不足に起因する例外を「エレガントに」処理することは可能ですか?
私のクラスの 1 つは、「TcAdsDll.dll」を参照するリソースをインポートします。.
....
Imports Okuma.EthernetIO
....
そのクラスでは、このリソースを使用しようとしたときに生成された例外をキャッチできます。
Try
Dim objAdsStateInfo As TwinCAT.Ads.StateInfo = Nothing
Try
'Do a bunch of fun stuff with Ethernet...
Catch...
'catch Ethernet errors
End Try
Catch ex As Exception
'This catches the exception generated when I try to instantiate an object that uses the dll which is no longer present
End Try
ただし、この例外を処理した後も、プログラムは引き続きクラッシュします。初期化フェーズを終了すると、フォームのメインが読み込まれ、そのイベントの最後のサブに到達します。「End Sub」ステートメントを実行するとすぐに (1 行ずつデバッグ)、次のメッセージが表示されます。
DllNotFoundException was unhandled
Unable to load 'tcadsdll.dll': The specified module could not be found.
(Exception from HRESULT: 0x8007007E)
この .dll を使用するリソースで何かを行う前に、この .dll の存在をチェックするコードを追加しましたが、imports ステートメントでクラスにリンクされているため、それでも破棄しようとしてクラッシュします。dll ファイルのチェックを含めるには、リソース (Okuma.EthernetIO) を再構築する必要がありますか? または、私のアプリケーションでこれを簡単に行うエレガントな方法はありますか?
更新:インポートを含むクラスにジャンプする前に dll ファイルの存在を確認することは、私にとってはうまくいっています。そもそも例外が生成されるのを防ぎます。ただし、疑問は残ります:
dll が見つからないという例外を処理する方法はありますか?