C++でのPluginManagerスタイルのプラグインメソッドの1つをお勧めします。
私は2歳以上の記憶からこれを書いていますので、それはゆるやかなガイドとしてだけではなく、決定的な答えです。
私は2,3年前に説明したように、私がプロジェクトで始めたサイトにlinkを含めました。私たちが入手した40以上のプラグインでうまくいきました。
[DLLプラグインC++クラス]を検索すると、リンクしたものが気に入らなければ、いくつかのサイトが見つかります。
あなたは本質的には、ご使用の環境のために/コンパイラ/ OSなど
を修正する必要があります、あなたのプラグインでシリアルポートを書くと閉じて、あなたは、読み取りを開く機能をしたいと仮定します。
純粋仮想基本クラスを作成し(行為Javaでインターフェースとして宣言ものとして):各プラグイン
/* This is the basic plugin header file that every plugin DLL has to include
Use your compilers pragmas/keywords to export the entire class from the DLL
In Microsoft land the keywords are _declspec(dllexport) to export the class
from the base DLL and __declspec(dllimport) to import the class into other
code. I'm using the MS keywords here because I don't remember how this is done
in other compilers. :)
*/
#if BUILDING_BASE_PLUGIN
/* You're compiling the DLL that exports the Plugin Base
#define BASE_DLL_EXPORT declspec(dllexport)
#else
/* You're compiling code that uses the plugin base
#define BASE_DLL_EXPORT declspec(dllimport)
#endif
class DLL_EXPORT SerialPortPluginBase
{
public:
enum SerialPortPluginError{ SUCCESS = 0, ERROR_1, ERROR_2, ERROR_ETC };
virtual SerialPortPluginError Open(/*Parameters*/) = 0;
virtual SerialPortPluginError Read(/*Parameters*/) = 0;
virtual SerialPortPluginError Write(/*Parameters*/) = 0;
virtual SerialPortPluginError Close(/*Parameters*/) = 0;
static std::string pluginName = "SerialPortPluginBase";
static int version;
};
、/登録解除を登録する方法、ならびに上記のクラスに基づいて、インタフェースを実装DLLにプラグインマネージャーがあります(下記のリンクを参照)。
各プラグインは個別のDLL/SOに入れる必要があります。
完全な例については、this siteを参照してください。
これが役に立ちます。 :)
私はそれを私のアプリに入れました。私の質問は、それをモジュール/プラグインにする方法です。 –
このリンクは質問に答えるかもしれませんが、ここで答えの重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 – Matthieu
@Matthieuはそれが指しているライブラリもそうです! –