0

Linux、Mac OS X、Windows、および BSD (必ずしも単一の実行可能ファイルとしてではなく、Java である必要はありません) で実行でき、単純なプラグインを使用して拡張できるアプリケーションを作成しています。

プラグインを実装する方法は、特定の関数を実装し、辞書をメイン プログラムに返すだけの単純な Python プログラムとして実行することです。

./pluginsプラグインのインストールは、プラグイン スクリプト ファイルをメインの実行可能ファイルに関連するディレクトリにコピーするだけです。

メイン プログラムは、上記のすべてのプラットフォーム間でコードを共有するスタンドアロンの実行可能ファイルにする必要がありますが、プラットフォーム固有のフロントエンドを使用します (したがって、Linux および BSD バージョンは単なる CLI ツールであり、Windows バージョンには C++ および MFC フロントエンドがあります)。 、Mac OS X バージョンには Objecive-C と Cocoa フロントエンドがあります)。

だから私はそれが本当に2つの質問だと思います:

  1. 複数のフロント エンド間で共通のコントローラー コードを共有する最も簡単な方法は次のとおりです。

    を。Mac 上の Objective-C?

    b. Windows 上の C++?

    c. Linux/BSD からの C/Python?

  2. 共通コントローラーからプラグインを実装してカスタム プラグインを実行する最も簡単な方法は何ですか?

4

2 に答える 2

2
  1. 私はここでフォンタニーニと一緒です。コントローラ ロジックに共有ライブラリ (DLL) を使用します。できれば C/C++ を使用し、RTTI (dynamic_cast<> と例外処理に必要) には注意してください。RTTI は DLL の境界を越えて機能しない可能性があります (たとえば、ある DLL でスローされた例外を別の DLL からキャッチする際に問題が発生する可能性があります)。

    Qt のような優れたクロスプラットフォーム ライブラリを探してください。これは、プラットフォームに依存しない方法で多くの機能 (ファイルシステム、プロセス、ネットワークなど、とにかく個別に開発したい GUI だけではありません) を提供します。

  2. Python/C APIは、C/C++ 機能を Python で使用できるようにする (およびその逆) ための基礎であり、拡張モジュールと組み込み Python インタープリターに独自の機能を提供するプログラムとの間にはほとんど違いはありません。

    ただし、作業を楽にするラッパー ジェネレーター (すべて Python API に基づいていますが、直接使用するよりも少ないコードで済みます) を使用することをお勧めします。例は次のとおりです。

    • boost::python (非常に便利で強力ですが、理解できないハードコア C++ 実装があります ;-)、過度のテンプレートの使用によりオブジェクト コードが大きくなります)、おそらくpyplusplusを使用して boost::python ラッパー コードを直接生成しますヘッダー ファイルから (関数シグネチャを除外または変更するなど、結果を微調整する可能性を犠牲にしないでください)
    • SIP (特に、それが開発された [Py]Qt と組み合わせて)
    • Swig (複数のスクリプト言語に適していますが、「pythonic」ではなくラップされている C API をミラーする API につながります)
    • pyplusplusと同じ GCCXML バックエンドに基づいているが、純粋な Python/C API コードを直接生成する PyBindGen は、より無駄のないバインディングにつながります (ただし、すぐにすべてのコードを理解できるわけではありません)。
于 2012-04-26T11:25:30.413 に答える
0
  1. アプリケーションのクロスプラットフォームPythonコンポーネントを共有する最も簡単な方法は、おそらくそれをコマンドラインプログラムとして実装し、各フロントエンドで関連するシステムコールを使用して呼び出すことですこれは最も堅牢な方法ではありませんが、十分である可能性があります。

  2. プラグインをPythonコードを含むファイルにしたい場合は、クラスを拡張するなどして、少なくとも規則に準拠し、コードで「importplugin_name」を使用してPythonランタイムにプラグインをロードすることをお勧めします。これは、プラグインを個別のプログラムとして存在させるよりも優れています。これは、標準の入力からテキストを解析する必要がなく、Pythonタイプとして出力にアクセスできるためです。

于 2012-04-20T11:30:08.653 に答える