Win32api の場合、次のようにします。
- アプリケーション用のプラグイン ディレクトリを用意します。
- アプリケーションのロード時に、そのディレクトリ内のすべてのファイルを一覧表示します
- 拡張 DLL を使用する場合は、LoadLibrary呼び出しでロードします。
- プラグインの名前が何であるかを示す情報を dll から取得します。
- メニュー/UI の変更を適切に作成します。
これで、dll を作成すると、すべてのプラグインに共通の標準関数セットが作成されます。または、プラグインのタイプごとの関数の標準セットと、これをアプリケーションで識別する関数。このようにして、各プラグインが正しい形式であることをテストし、動的ライブラリのメソッドをその場で呼び出すことができます。それらをメイン プログラムにコンパイル/リンクする必要はありません。
このルーチンは、共有ライブラリ (DLL など) をサポートするすべてのプラットフォームで広く似ています。
私が言いたいことのコード例として、次のような plugin.h ファイルがあるかもしれません:
#ifndef PLUGIN_H_
#define PLUGIN_H_
#define PLUGIN_CRYPTO 1
#define PLUGIN_FORMAT 2
#define PLUGIN_EXAMPLE 3
#endif
次に、このヘッダーをメイン プログラムと作成するプラグインの両方に #include します。plugin-dll.cpp (再び例) には、次のようなメソッドがあります。
int GetPluginType()
{
return PLUGIN_CRYPTO;
}
次に、この関数の結果を切り替えて、実行する正しいルーチンに関数ポインタを割り当てることができます。
実装の詳細情報:
という理由だけで、Linux (POSIX) の同等物:
- dlopen - 動的ライブラリを開きます.
- dlsym - GetProcAddress と同等 - シンボル名への関数 ptr を取得します。
- dlclose - FreeLibrary と同等