2012-04-20 9 views
0

私はLinux、Mac OS X、Windows、BSD(必ずしも単一の実行可能ファイルではないため、Javaである必要はありません)で実行できるアプリケーションを作成しており、単純なプラグインを使用して拡張可能です。Pythonプラグインの拡張性を備えたクロスプラットフォームアプリケーションを作成する最も簡単な方法は?

私のプラグインを実装する方法は、特定の機能を実装し、辞書をメインプログラムに戻すだけの単純なPythonプログラムです。

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

メインプログラムは、上記のすべてのプラットフォームのうち、プラットフォーム固有のフロントエンド(LinuxとBSDのバージョンはCLIツールのみであるため、WindowsバージョンにはC++およびMFCフロントエンド、Mac OS XバージョンにはObjecive-CとCocoaのフロントエンドがあります)。

:複数のフロントから終了の間で共通のコントローラのコードを共有するための最も簡単な方法は何

  1. は、だから私はそれが実際には2つの質問だと思います。 Objective-CはMac上で動作しますか?

    b。 WindowsのC++?

    c。 Linux/BSDのC/Python?

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

答えて

2
  1. 私はここfontaniniています。コントローラロジック用の共有ライブラリ(DLL)を使用します。できればC/C++を使用してください。また、RTTI(dynamic_cast <>と例外処理に必要です)に注意してください。DLLボーダーではうまくいかない場合があります。

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

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

    しかし、ラッパージェネレータ(いずれもPython APIに基づいていますが、直接使用するよりコードが少なくて済みます)を使用して、あなたの人生を楽にすることができます。例は:

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

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

関連する問題