C++ のプラグイン システムは、ABI が適切に定義されておらず、各コンパイラ (またはそのバージョン) が独自のルールに従うため、困難です。ただし、Windows 上の COM は、さまざまなコンパイラを使用するプログラマがシンプルなインターフェイスを使用してホスト アプリケーション用のプラグインを作成できる、最小限のプラグイン システムを作成できることを示しています。
現実的に考えてみましょう。この点ではあまり役に立たない C++ 標準については、しばらく脇に置いておきましょう。C++ プラグインをサポートする Windows および Mac (およびオプションで Linux) 用のアプリを作成し、プラグイン作成者にかなり幅広いコンパイラーの選択肢 (たとえば、2 年未満のバージョンの Visual C++、GCC、または Intel の C++ コンパイラー) を提供したい場合、C++ のどの機能を頼りにすればよいでしょうか。
もちろん、プラグインは特定のプラットフォーム用に作成されるものと想定しています。
頭に浮かんだ C++ の機能と、その答えをいくつか挙げます。
- vtable レイアウト、抽象クラスを通じてオブジェクトを使用するには? (はい)
- 組み込み型、ポインター? (はい)
- 構造体、共用体? (はい)
- 例外はありますか?(いいえ)
- extern "C" 関数ですか? (はい)
- 組み込みパラメータ型を持つ非 extern "C" 関数を stdcall しますか? (はい)
- ユーザー定義のパラメータ型を持つ、非 stdcall 非 extern "C" 関数ですか? (いいえ)
その分野での経験があれば、ぜひ共有していただければ幸いです。C++ プラグイン システムを備えた、そこそこ成功したアプリをご存知でしたら、それも素晴らしいと思います。
カール
ベストアンサー1
ドクター・ドブのジャーナルに記事がある独自のプラグイン フレームワークの構築: パート 1これは、このテーマに関する非常に良い読み物です。これは、C/C++ クロスプラットフォーム プラグイン フレームワークのアーキテクチャ、開発、および展開を網羅した一連の記事の始まりです。