4

.NET アプリケーションから呼び出すネイティブ dll (Delphi) がいくつかあります。DLL で何らかのタイプのクラッシュが発生すると、.NET アプリケーション全体がクラッシュします。これを防ぎ、.NET アプリケーションがクラッシュしてエラーを認識しないようにするにはどうすればよいですか。ネイティブ dll からの特定のエラー フィードバックは必要ありません (クラッシュしたため、これは不可能です)。しかし、「xyz.dll がクラッシュしました」のような内容を .NET ログ ファイルに書き込みたいと考えています。

.NET から (Delphi または C++) dll を P/Invoking することは可能ですか?

4

2 に答える 2

3

これは、DLL がエクスポートされた関数から例外をスローした場合に発生します。DLL はそれを行ってはならないので、DLL の境界ですべての例外をキャッチし、それらをエラー コードの戻り値に変換する必要があります。

DLL を制御できない場合は、DLL にラッパー レイヤーを書き込む必要があります。元の DLL を呼び出す別のネイティブ DLL を作成し、それがスローする例外をキャッチします。これは、私が推測する別の Delphi DLL で行うことも、SEH を使用して例外をキャッチする C または C++ DLL で行うこともできます。

このようなラッパー DLL のコード生成をスクリプト化することは可能です。ラップする必要がある関数がたくさんある場合は、それを行いたいと思うでしょう。

于 2013-06-04T14:07:33.503 に答える
3

Delphi DLL のすべてのエントリ ポイントは、try...except ブロックに配置し、呼び出しがエラーなしで完了したかどうかを示す値(int)を .NET 側に返す必要があります。

于 2013-06-04T13:55:15.833 に答える