2012-01-15 16 views
2

複数のプラットフォームと互換性がある(Windows/Linux)必要があるC++アプリケーションを開発しており、重要な変更を行わずにニーズに合わせてソフトウェアを拡張できるようにしたいアプリケーションの部分(私はC++コードでそれらを望んでいないので)。埋め込みスクリプトを使用したC++アプリケーションの拡張

私が探しているのは、スクリプト言語を埋め込むことです(私は既に慣れ親しんでいるのでPythonが好きですが、必須ではありません)ので、プラグインフォルダに入れられたスクリプトは、必要ならばアプリケーションのオブジェクトを操作できますこれらのオブジェクトは変更可能です。

最も単純な例:誰かが自分のアプリケーション用に独自のUIを構築したい場合、そのようなスクリプトを使用することができるはずです。

しかし、問題は、私はC++や外部スクリプトを一緒に使用したことがないので、どうやって起動するのか本当に分かりません。開始するための資料を探した後、私はLuaがそれを行うのに良い言語であると主張しましたが、初心者のチュートリアルは見つけられませんでした。

オンラインリソース、または良い本であれば、誰かが良いスタート地点を知っていれば本当に感謝します。私は良い本に数ドルを費やしても構いません。

学習者として、私は、例のコードとそれらを説明するいくつかの行の組み合わせからベストを学ぶ傾向があります。

+0

@Hossein情報をありがとうございます。一定。 – nijansen

+0

[V8を使用してJavaScriptを埋め込むためのガイド](http://code.google.com/apis/v8/embed.html)に興味があるかもしれません。 – jterrace

答えて

6

Programming in Luaを読むことをお勧めします。このマニュアルでは、LuaをC(およびC++)に埋め込む方法についてのセクション全体があります。

非常に高い評価はAmazon usersです。

言語もかなり良いです。online documentationとアクティブmailing listです。

+0

これまで見てきたことから、この本の推薦は最も有望です。私は間違いなくそれに読書をします。ありがとう。 – nijansen

0

Pythonの場合、私はboostライブラリがそれを行うためのものだと思います。ルアについては、私はそれを自分で使ったことはありませんが、すばらしいGoogle検索では初めてdebian admin、次にLua's C interfaceにつながりました。あなたはそれらを調べましたか?

+0

ルアビッドにはルアビンンドがあります。ルアビンドはブースト・パイソンのルーツを持ち、まったく同じように(よく)動作します。 –

+0

ありがとうございます!私は前にルアを使っていないし、どうやって始めたのか興味があった。 – guinny

1

記事here at linux journalは、c/C++コードにPythonインタプリタを埋め込む方法を開始するのに適しています。ただし、インタプリタが埋め込まれると、ソフトウェアの一部をスクリプト環境に公開する必要があるため、これは戦闘の半分に過ぎません。これを行うための基本的なAPIはC言語であり、コードのほとんどがC++の場合は、C++クラスの周りにCラッパーを記述するのが面倒なので、boost :: pythonを使用するのが最善の方法です。 Py ++を使ってboost :: pythonバインディングを生成することもできます。

スクリプティングをカスタマイズの扉として使いたいだけで、Pythonのメモリフットプリントで暮らすことができるのであれば、Luaよりも良い選択かもしれません。 Luaは通常、ゲーム開発のような小さな環境に適しています。また、lua開発者よりもはるかに多くのPython開発者だけでなく、より多くのビルトインとサードパーティのライブラリが利用可能です。

3

Pythonを使用する場合は、私は間違いなくBoost.Pythonを使用することをお勧めします。それは信じられないほどうまく設計されたライブラリです。ただ、例:あなたは、PythonのC++クラスを公開しなければならないすべてはこれです:

struct World 
{ 
    void set(std::string msg) { this->msg = msg; } 
    std::string greet() { return msg; } 
    std::string msg; 
}; 

BOOST_PYTHON_MODULE(hello) 
{ 
    class_<World>("World") 
     .def("greet", &World::greet) 
     .def("set", &World::set) 
    ; 
} 

それは自動的にほとんどすべてを処理します。種類、例外間の変換が、それも両者の間に参照カウントオブジェクトを使用することができますboost::shared_ptrの言語。

+0

これは素晴らしく、Boostの文書もよく書かれているようです。私は今夜​​、それをもっと深く見ていきます。ありがとう。 – nijansen

+0

WindowsでVisual Studioを使用している場合は、ライブラリをインストールする方がはるかに簡単です.BoostProのインストーラを使用してください:http://www.boostpro.com/download/ –

+0

残念ながら、私はこのプロジェクトに取り組んでいませんDebian、gcc 4.4.5を使っていますが、ヒントに感謝します。 – nijansen

関連する問題