obex API リファレンス (暫定版)

以降の暫定版 API リファレンスはすべてを網羅したものではありません。しかし、Cで書かれる Max オブジェクトのための新しい obex API に関する主要な点を記述しています。

ヘッダファイル (Max API で必要とされるものへの追加)

ext_obex.h

オブションとして commonsyms.c をあなたのプロジェクトに加え、追加されたシンボルの定義を行なうことができます。commonsyms.c のためのヘッダファイル(commonsyms.h) は ext_obex.h によってインクルードされていることがわかるでしょう。シンボルが宣言されたとしても、シンボルは次に示すような呼出しを行うまで定義されず、使用できません(コードのコンパイルは可能でしょう)。

common_symbols_init();

これは、main() の中で呼び出されます。

クラスルーチン

class_new

   
  あなたのクラスの名前、インスタンス生成関数と消滅関数(free関数) 、アーギュメントの型とサイズを Max に知らせることによって初期化を行うために class_new 関数を使います。obex クラス機能(アトリビュートなど)を使用する開発者は、従来の setup ルーチンの代わりに class_new を使用しなければなりません。
   
  t_class *class_new(char *name, method mnew,
method mfree, long size, method mmenu, short type, ...);
     
  name C文字列による、あなたのクラス名
  mnew インスタンス生成関数
  mfree インスタンス消滅関数 (free関数)
  size バイト単位で表される、あなたのオブジェクトデータ構造体のサイズ。通常、Cの sizeof 演算子をここで用います。
  mmenu ユーザがパッチャーウィンドウのパレットからあなたのクラスの新しいオブジェクトを作った時に呼び出される関数(UI オブジェクトの場合のみ)。UI オブジェクトを定義しているのではない場合には、0Lを渡します。
  type 「Writing Externals in Max」ドキュメント(MaxSDKの中にあります)の Chapter 3 で説明されている、標準の Max 型リスト。型リストの最後のアーギュメントは 0 になります。通常、obex オブジェクトは1つの型アーギュメント A_GIMME を持ち、その後に 0 が続きます。
     
 

このルーチンはあなたの新しいオブジェクトクラスへの class ポインタを返します。このポインタは他の多くの関数で用いられ、グローバル変数として格納されなければなりません。


class_free

     
  すでに定義されているオブジェクトクラスを解放する場合に、 class_free 関数を使います。このルーチンは通常、エクスターナル開発者には使用されません
   
  t_max_err class_free(t_class *c);
     
  c あなたのクラスへのポインタ
     
 

このルーチンは、成功するとエラーコード MAX_ERR_NONEを返します。失敗した場合には“ext_obex.h”で定義される他のエラーコードの1つを返します。


class_register

     
  すでに定義されているオブジェクトクラスを登録する場合に、class_register 関数を用います。このルーチンは必須で、main()の最後で呼び出されなければなりません。
   
  t_max_err class_register(t_symbol *name_space, t_class *c);
     
  name_space

Max パッチャーの中でインスタンス化される obex クラス( box や UI オブジェクトなど)の場合には定数 CLASS_BOX、、内部的に使用されるだけのクラスの場合には、定数 CLASS_NOBOXが使われます。通常、name_space にはCLASS_BOX が使用されます。

  c c あなたのクラスへのポインタ
     
 

このルーチンは、成功するとエラーコード MAX_ERR_NONEを返します。失敗した場合には“ext_obex.h”で定義される他のエラーコードの1つを返します。


class_addmethod

     
  すでに定義されているオブジェクトクラスにメソッドをバインドするために、 class_addmethod 関数を使います。
   
  t_max_err class_addmethod(t_class *c, method m, char *name, ...);
     
  c あなたのクラスポインタ
  m あなたのメソッドが要求された際に呼び出される関数
  name 定義されたメッセージのC文字列 (メッセージセレクタ)
  ... 標準の Max 型リストフォーマットの中で、メッセージに対してアーギュメントを指定する1つまたはそれ以上の整数。(詳細は、Wrinting Externalx in Max の Capter 3 を参照して下さい。)
     
 

class_addmethod ルーチンは基本的に従来の addmessルーチンのように働きます。これは、あなたのオブジェクトの左端のインレットで受け取られるメッセージ文字列 nameに応答するために、m によって指される関数を追加します。このルーチンは、成功するとエラーコード MAX_ERR_NONE を返し、失敗した場合には“ext_obex.h”で定義される他のエラーコードの1つを返します。


class_addattr

     
  すでに定義されているオブジェクトクラスにアトリビュートをバインドするために、 class_addattr 関数を使います。
   
  t_max_err class_addattr(t_class *c, t_object *attr);
     
  c あなたのクラスポインタ
  attr バインドされるアトリビュート。アトリビュートは、 attribute_new, attr_offset_new または attr_offset_array_new によって返されるポインタです。
     
 

このルーチンは、成功するとエラーコード MAX_ERR_NONE を返し、失敗した場合には“ext_obex.h”で定義される他のエラーコードの1つを返します。


class_obexoffset_set

     
  すでに定義済みのオブジェクトクラスと共に、あなたのクラスのデータ構造体の obex メンバのオフセットバイト数を登録するために、 class_obexoffset_set 関数を使います。このルーチンの使用には obex クラスオブジェクトが必要です。これは、main() から呼び出さなければなりません。
   
  void class_obexoffset_set(t_class *c, long offset);
     
  c あなたのクラスポインタ
  offset

あなたのオブジェクトのデータ構造体の obex メンバへのバイトオフセット。通常、オフセットを計算するために、マクロ calcoffset を使います。


class_obexoffset_get

     
  あなたのクラスのデータ構造体の obex メンバのバイトオフセットを知るために、 class_obexoffset_get 関数を使います。
   
  long class_obexoffset_get(t_class *c);
     
  c

あなたのクラスポインタ

     
 

このルーチンはあなたのクラスのデータ構造体の obex メンバのバイトオフセットを返します。


class_name_get

     
  与えられたクラスポインタによって、クラスの名前を知るために、 class_name_get 関数を使います。
   
  t_symbol *class_nameget(t_class *c);
     
  c あなたのクラスポインタ
     
 

成功した場合、このルーチンはクラスの名前を t_symbol * として返します。


class_findbyname

     
  与えられたクラスのネームスペースと名前によって、クラスへのポインタを見つけるために、class_findbyname 関数を使います。
   
  t_class *class_findbyname(t_symbol *name_space, t_symbol *classname);
     
  name_space クラスのネームスペースが要求されます。通常、Max パッチャーの内部でインスタンス化されることのできる obex クラス(box、UI オブジェクトなど)の場合は定数 CLASS_BOX に、内部的にのみ使用されるクラスの場合は定数 CLASS_NOBOX になります。開発者は自分自身のネームスペースを同様に定義することができますが、この機能は現在ドキュメント化されていません。
  classname 探索されるクラス名
     
 

成功した場合、このルーチンはクラスのデータへポインタを返します。そうでない場合は NULL を返します。


calcoffset

     
  マクロcalcoffsetは次のように用いられます:
   
  long calcoffset(void classtype, void varname);
     
  classtype

あなたのクラスの定義型 (例. t_myobject)

  varname あなたのクラスのデータ構造体の中にある変数の名前
     
 

このマクロは、指定されたクラス型のために、クラスのデータ構造体の中の指定された変数のバイトオフセットを返します。