P/Invoke呼び出しでネイティブAPIをラッピングしています。エラー処理の場合は、次のメソッドを使用します。P/Invokeで管理対象および非管理対象のコールバックチェーンで例外を発生させる
- マネージコードからコールバック関数を呼び出します。
- エラーを示すために、アンマネージコードからこのコールバック関数を呼び出します。
- コールバックに例外をスローします。言い換えれば
の流れはこのようなものです:私は、このメソッドをテストするとき、私は最初の管理方法で成功した例外をキャッチすることができ
Managed Method => (P/Invoke) Unmanaged Function => Managed Callback => Throw Exception.
。しかし、私はこれがスタックやリークメモリに何らかの副作用を引き起こさないことを100%確信しているわけではありません。
この方法を使用しても安全ですか?そうでない場合は、P/Invokeを使用してAPIを乱雑にすることなく、エラー(スタックトレースを含む可能性があります)を示す他の方法がありますか?
P.S.私はネイティブコードにアクセスできます。
管理対象コールバックの仕事は何ですか?それが存在する唯一の理由が管理例外を発生させることであるならば、マネージコールバックを必要とせずにC++/CLI interopアセンブリを書くことを検討するべきでしょう。 – IInspectable
はい私はC++/CLIについて知っていますが、プロジェクトはP/Invokeアプローチで開始されており、既存の機能を変換するには多少の作業が必要です。 –
P/Invokeを使用している場合は引き続きP/Invokeを使用し、新しいコードには混在モードのinteropアセンブリを使用できます。それにもかかわらず、それは私が尋ねた質問にはあまり答えなかった。 – IInspectable