私はいくつかの巨大なアンマネージドライブラリのラッパーに取り組んでいます。ほとんどすべての関数は、内部のエラーハンドラを深く呼び出すことができます。デフォルトのエラーハンドラはコンソールにエラーを書き込み、abort()関数を呼び出します。この動作はマネージライブラリには望ましくないので、私はデフォルトのエラーハンドラを自分のものに置き換えて、いくつかの例外をスローし、この例外を処理した後にプログラムを通常の実行を続けるようにします。ラップされた関数のいずれかが呼び出される前に、エラーハンドラを変更する必要があります。
ラッパーライブラリーは、ラップされたライブラリーに静的にリンクされた管理対象C++で書かれているため、「何百ものdllインポートがあるタイプ」のようなものはありません。私はまた、ラッパーライブラリーの中のすべてで使用される単一のタイプを見つけることができません。だから、私は必要なコードを実行する単一の型で静的なコンストラクタを定義することで、この問題を解決することはできません。アセンブリのロード時にコードを実行
:
はLibrary.Initialize(のようないくつかの静的メソッドを定義します)彼のコードは、ラッパーライブラリのどの部分を使用する前に、クライアントが1回呼び出さなければなりません。
すべてのトップレベル関数で使用される(私はこのサブセットのサイズは25-50型のようなものと思われます)、最も小さなサブセットを見つけ、Library.Initializeを呼び出す静的コンストラクタを追加しますそのシナリオでは内部)をこれらのすべてのタイプに割り当てます。
私はthisとthis質問を読んだが、彼らは私を助けてくれませんでした。その問題を解決する適切な方法はありますか?たぶんいい素敵なハックがありますか?