アンマネージAPIを使用するPowerShellモジュールを作成しています。それが機能する方法は次のようになります。
PowerShell Module
|
˅
.NET Wrapper DLL
|
˅
Native DLL
このネイティブDLLには、操作が失敗したかどうかを通信する2つの方法があります。stdoutにステータスコードを書き込むか、Win32例外をスローします。UseExceptions()
APIまたはを呼び出すことで設定を指定できますDontUseExceptions()
。ただし、どちらのオプションも問題があります。
- 例外なく、関数呼び出しを成功させると
0
、画面に出力されます。関数呼び出しが失敗すると、警告メッセージが画面に出力されます。これにより、エラーの検出が困難になるだけでなく、モジュールのユーザーへの出力が乱雑になります。 - 例外を除いて、マイナーエラーが発生すると、.NET例外ではなくWin32例外であるため、PowerShellプロセス全体がクラッシュします。
Win32例外がPowerShellプロセス全体をクラッシュさせないようにする方法はありますか?または、このDLLのstdoutをインターセプトして、ステータスコードを自分で解析する方法はありますか?
私が使用しているAPIは、広く使用されている地理データ抽象化ライブラリです。