「電波とどいた?」
2007/05版 その3

2007/05/21 (月)

ncbind のススメ (吉里吉里)

そういえばこれについてさっぱり書いてなかったなぁと。

ncbindとは何か?吉里吉里のプラグイン作成支援用のライブラリとして うちの三上君につくってもらったテンプレートライブラリです。 吉里吉里公式に提供済。C++で記述されたクラスを、そのクラス自身には 特に手をいれることなく、さくっと吉里吉里用のクラスとして組み入れることができます。

こんなかんじで使えます。


calc.cpp
--------------------------------------------------
#include "ncbind.hpp"

// クラスの定義
class Calc {
public:
    Calc() {}
    ~Calc() {}
    int add(int a, int b) { return a+b; }
    int sub(int a, int b) { return a-b; }
    int mul(int a, int b) { return a*b; }
    int div(int a, int b) { return a/b; }
};

// テンプレート記述(マクロ併用)
NCB_REGISTER_CLASS(Calc) {
  NCB_CONSTRUCTOR(());
  NCB_METHOD(add);
  NCB_METHOD(sub);
  NCB_METHOD(mul);
  NCB_METHOD(div);
};
--------------------------------------------------

このファイルを ncbind.cpp とあわせて VC か MinGW で コンパイルして dll をつくるだけで吉里吉里のプラグインが完成します。 吉里吉里の外部インターフェースである iTJSDispatch2 や、プラグイン 記述用のスタブの細かい仕様を知る必要はありません。

TJS2 からは以下のように普通のクラスと特に変わりなく使えます


------------------------------
Plugins.link("calc.dll");
var a = new Calc();
Debug.message(a.sub(10,20));
Debug.message(a.add(10,20));
Debug.message(a.mul(10,20));
Debug.message(a.div(10,20));
------------------------------

まじめに書くとかなりめんどくさい引数の展開処理とかも自動で処理 されるので楽勝です。もちろん返り値も適切に処理されます。

吉里吉里の既存クラスにメソッドを拡張するような ことも簡単にできます 例:layerExMovie

C++ 側でクラスを引数にとるメソッドに対して、 吉里吉里側のオブジェクトをわたすと、それから目的の クラスを引き出して受け渡してくれる処理とかも 全部やってくれます。例: Magickpp

自分のシステムのメンテがめんどくさくなって吉里吉里乗り換え検討 してるけど、手元に書きためた C++ のライブラリがなぁ、とか 思ってるような人に超おすすめなのでした。




メールはこちらへ...[わたなべごう (go @(at) denpa .(dot) org)]

この日記は、GNSを使用して作成されています。