2010-12-13 4 views
3

は、まず私がやろうとしていますかを説明させてください:Qtのプログラミング:シリアルポート通信モジュール/プラグイン

  1. 私は主のWebKitに基づいてアプリケーションを構築するためにはQtを使用しています。このアプリは、インターネットからコンテンツを取得し、伝統的なWebの方法でユーザーに提示します。

  2. 私のアプリは、プリンタ、ICカードリーダーなどの多くのシリアルポートデバイスを通信する必要があります。

  3. これらのシリアルポートデバイスは異なるモデルであるため、通信プロトコルが異なります。

  4. 私はシリアルポートデバイスの通信部分と別のアプリケーションを使いたいので、すべてのアプリケーションを更新せずに通信部分を更新することができます。

これを行うには、Qtプラグイン/ Webkitプラグインを書く必要がありますか?どんな提案も歓迎です!シリアルポートの部分については

おかげ

答えて

0
+0

私はそれを私のアプリに入れました。私の質問は、それをモジュール/プラグインにする方法です。 –

+0

このリンクは質問に答えるかもしれませんが、ここで答えの重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 – Matthieu

+0

@Matthieuはそれが指しているライブラリもそうです! –

0

は別のqmakeのファイルにTARGET = libとCONFIG + = DLLを使用してDLL /ダイナミックライブラリで通信部を構築します。

0

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を参照してください。

これが役に立ちます。 :)

3

AFAIK Qtは既にプラグインメカニズムを提供しています。

QLibraryのクラスとその例を確認してください。何をしたい

0

は、アプリケーションのためのQtのプラグインを作成することです:

http://doc.qt.io/archives/qt-4.7/plugins-howto.html

あなたはプラグインを通して、あなたのメインのアプリケーションを拡張することができるでしょう。アプリケーションに追加する必要があるのは、プラグインをロードするプロセスと、プラグインメソッドを呼び出すためのイベントを追加することだけです。

関連する問題