2

フックのようなシステムを実装するにはどうすればよいですか?
これは私のセットアップです:

私はこれらの静的ライブラリを持っています:

  • A.lib
  • B.lib

A と B は、同じアプリケーション内に一緒に含めることができるモジュールのようなものです。問題は、B に公開したい関数が A にあるということです。コールバック リストを使用してこれを行っていましたが、このアイデアには満足していません。なのでWin32APIのようなフック的な仕組みは実装できると思いますが、専門家の意見を聞きたいです。

もちろん、両方のソースコードにアクセスできます。

注:私はクラスを使用していないことを忘れていました。設計上の決定により、このプロジェクトのクラスまたはオブジェクトを作成できないため、ここでは継承のようなものは許可されていません。

4

1 に答える 1

2

共有部分を 3 番目のライブラリに移動することを検討しましたか?

フック メカニズムは、厳密に静的にリンクされたシナリオ (動的な複雑さの追加の支援による共有依存関係) ではあまり効果的ではありません。両方のライブラリがアクセスできるフックを配置する場所がある場合は、代わりに関数をそこに配置します。

または、ライブラリ A から関数をエクスポートし、ライブラリ B から参照します。おそらく、ライブラリが正しい順序でリンクされていることを確認してください。リンカがそれを整理する必要があります。

ライブラリ A がリンクされている場合もリンクされていない場合もあり、ツールチェーンがそれをサポートしている場合は、B で関数のダミー バージョンを弱いシンボルとして宣言できます。これは、A がリンクされている場合にオーバーライドされます。

于 2009-05-29T01:07:06.627 に答える