2009-05-29 5 views
2

フックのようなシステムを実装するにはどうすればよいですか?
これは私の設定です:私のアプリケーション内でフックする

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

  • A.lib
  • をB.lib

AとBは内一緒に含めることができるモジュールのようなものです同じアプリケーション。私はAに、Bに公開する関数を持っています。私はコールバックリストを使ってこれを行っていました...しかし、私はこの考え方には満足していません。だから、私はWin32APIのようなフッキングのようなシステムを実装できると思うが、専門家からの意見を聞きたい。

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

注:私はクラスを使用していないと言及していませんでした。設計上の理由から、このプロジェクトのクラスやオブジェクトを作成できないため、継承のようなものは許可されていません。

答えて

2

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

厳密に静的にリンクされたシナリオでは、フックのメカニズムはほとんど勝たないでしょう - 動的な複雑さの余分な助けと共有の依存関係。両方のライブラリがアクセスできるフックを置く場所があれば、その場所に関数を置くだけです。

ライブラリAから関数をエクスポートし、ライブラリBから参照してください。ライブラリが正しい順序でリンクされていることを確認してください。

ライブラリAは、またはリンクされてもしなくてもよい、とあなたのツールチェインがそれをサポートしている、あなたはAがリンクされている場合は上書きされweak symbolとしてBに関数のダミーバージョンを宣言することができます。

+0

すばやくお返事ありがとうございます。はい、私は行いましたが、この機能だけを公開したいので、機能のためにアプリケーションに追加の依存関係を生成するのは無意味です。 – Veehmot

+0

フックメカニズムは、動的な複雑化の余分な助けと共有された依存性ではあまり勝てないでしょう。両方のライブラリがアクセスできるフックを置く場所があれば、その場所に関数を置くだけです。 –

+0

私は今あなたのポイントを見ます。これは良いアプローチですが、私は他の答えを待つでしょう。静的ライブラリを利用して、関数やそのようなものを置き換えるような、コンパイル時の解決策にはうれしいでしょう。 – Veehmot

関連する問題