2011-01-24 13 views
5

私は、Cのエクスポートを使ってプラグイン用にいくつかのパブリックインターフェイスを持つC++ MFCのソフトウェアを持っています。プラグインのサポートを実装する最良の方法

私は、外部3者開発のためにソフトウェアをオープンしようとしています。 しかし、Cの書き出しを使用するのは、ハードコアプログラマです。

どのような方法で実装すればよいですか?私はLUAについて聞いたが、他の可能性について知りたい。

答えて

0

あなたに適したCの書き出しプログラミングの例がある場合は、あなたの前提となる「ハードコア」の概念を脇に置き、Nikeが「やってください」と言うことをお勧めします。

予想よりも簡単かもしれません。

+0

しかし、私は「開発者」をプロジェクトに引き付けるべきです。そして確かにCの輸出は、今日の開発者のためではありません。 – bratao

+0

カット&ペーストしても? –

3

これは実際にはプログラムのタイプとターゲットオーディエンスによって異なると思います。 Cとコンパイラがそれらを書くのに必要なアドオンを持っていないことは確かです。しかし、私は確かにLuaに大きなアドオンを書いてはいけません。

だから、スクリプト言語かコンパイル言語のどちらを使用するかを決める必要があります。カジュアルなユーザーをターゲットにしている場合は、スクリプティング言語を使用する方がよいでしょう。プロフェッショナルな開発者(例えば、アドオンが社内プログラマーによって開発された金融パッケージ)をターゲットにしている場合、コンパイルされた言語が最適に機能するかもしれません。

ああ、また、あなたは潜在的なプラグイン開発者の束を尋ねてみませんか?

我々はプラグイン(.dllファイルまたは.soという)、3つの必要なメソッド( create_plugin()destroy_plugin()、および get_type()を見つけるをロードするために、C-命名規則と機能の dlopen\LoadLibraryファミリを使用しています。

プラグインの実装を単に

+0

答えに感謝しますが、ソフトウェアはフリーソフトウェアとしてメインストリームにリリースされます。だから私はまだ潜在的なプラグインの開発者を持っていないが、私はそれらを引き付けるために可能な限り簡単に物事を維持したい。 – bratao

+0

@bratao開発者がいない場合は_yet_、Cのインターフェイスが既に完了している場合は、最初にリリースし、他のプラグイン環境の需要がどれくらいあるかを確認します。 –

0

同等の(どんな言語で、彼らが使用)ライブラリあなたが行うには、あなたのプラグインを必要とする内容に応じて

extern "C" PLUGIN_API plugin_interface* create_plugin(arg_pack*); 
extern "C" PLUGIN_API void destroy_plugin(plugin_interface*); 
extern "C" PLUGIN_API const char* get_type(); 

にvisibileであることを確認する必要があり、arg_packは、特定の引数に置き換えることができます。

[gmodule][1]のドキュメントをチェックして、このようなことを行うためのクロスプラットフォームのライブラリを見てください。

0

インターフェイスを作成して返すためにエクスポートC関数を使用してバイナリインタフェースを実装。

// your_plugin_header 

// Plugins must implement this interface 
struct PluginInterface { 
    virtual void Release()=0; 
    virtual void Method()=0; 
    virtual void Method2()=0; 
}; 


// Plugin dll's must export this function that creates a new object that implements 
// the PluginInterface; 
extern "C" bool CreatePluginObject(PluginInterface**); 

次に、Lua/Javascript/Pythonブリッジとしてサンプルプラグインを実装し、ソフトウェアでバンドルします。このボックスを使用すると、密接に結合されたC++インターフェイスと高度にスクリプト化可能なプラグインインターフェイスがサポートされます。誰かが別のスクリプトを好む場合は、自分でそれを行うことができます。

関連する問題