1

アンマネージAPIを使用するPowerShellモジュールを作成しています。それが機能する方法は次のようになります。

PowerShell Module
       |
       ˅
.NET Wrapper DLL
       |
       ˅
   Native DLL

このネイティブDLLには、操作が失敗したかどうかを通信する2つの方法があります。stdoutにステータスコードを書き込むか、Win32例外をスローします。UseExceptions()APIまたはを呼び出すことで設定を指定できますDontUseExceptions()。ただし、どちらのオプションも問題があります。

  1. 例外なく、関数呼び出しを成功させると0、画面に出力されます。関数呼び出しが失敗すると、警告メッセージが画面に出力されます。これにより、エラーの検出が困難になるだけでなく、モジュールのユーザーへの出力が乱雑になります。
  2. 例外を除いて、マイナーエラーが発生すると、.NET例外ではなくWin32例外であるため、PowerShellプロセス全体がクラッシュします。

Win32例外がPowerShellプロセス全体をクラッシュさせないようにする方法はありますか?または、このDLLのstdoutをインターセプトして、ステータスコードを自分で解析する方法はありますか?

私が使用しているAPIは、広く使用されている地理データ抽象化ライブラリです。

4

1 に答える 1

1

.NET ラッパー DLL で SEHException をキャッチして、Win32 例外をキャッチできるかどうかを確認してください。もう 1 つのオプションは、CLI/C++ を使用して .NET ラッパーを作成し、C++ 例外処理メカニズムを使用して例外をキャッチすることです。

于 2012-09-15T03:03:30.560 に答える