stub ファイルをガシガシ書く
差し当たって、新しいクラスを定義しない範囲で、メソッドを Scheme 側に定義していこうと思います。
出発点
;;; ;;; id3liblib.stub ;;; " #include \"id3lib_glue.h\" " ;; これは多分、stub中でオートボクシングのために使われる定義 ;; 実際の定義は、id3lib_glue.cpp の ;; void Scm_Init_id3lib() ;; で行われる。 ;; ;; Gauche 組み込みの foreign pointer framework (?) の恩恵により、 ;; C/C++ のオブジェクトをくるむだけの Scheme オブジェクトは ;; このように簡単に定義できる。 ;; と言うことだと思う。 (define-type <id3tag> "ID3_Tag*" "ID3Tag" "ID3TAG_P" "ID3TAG_UNBOX" "ID3TAG_BOX") ;; これは foreign pointer framework によるオートボクシングの効果。 ;; C++ オブジェクトのポインタを返すだけで良い。 ;; (本当か?エラー処理は?) ;; ;; ID3TAG_BOX マクロを展開して出来るコードは ;; Scm_MakeForeignPointer(ID3TagClass, ptr) ;; (id3lib_glue.h)であるが、この関数の中では NULL チェック等はしてくれるようだ。 (define-cproc make-id3tag (name::<const-cstring>) (expr <id3tag> "new ID3_Tag(name)")) ;; これは genstub 組み込みのオートボクシング定義 ;; $PREFIX/share/gauche/0.8.8/lib/genstub に一覧あり (define-cproc id3tag-filename (tag::<id3tag>) (expr <const-cstring> "tag->GetFileName()")) ;; Local variables: ;; mode: scheme ;; end: