dl.soも参照。また、現在dl2のruby-1.8 版も開発されている。現行バージョンの dl.so よりは使いにくいところがある反面、安定してい るかもしれない。
モジュール DL は数個のモジュール関数と定数を持つ 3 つのクラスから成っ ている。クラス DL::Symbol は呼び出す事ができるシンボルに相当する。クラス DL::PtrData は、C のポインタのようなメモリブロックを示す。 クラス DL::Handle から具体化されたオブジェクトはオープンしたライブラリの 操作を持つ。
DL.dlopen(lib){|handle| ... }
DL::Handle.new(lib) と等価。
set_callback(cbtype, entry){|args| ... }
set_callback(cbtype, entry, proc)
proc や指定したブロックを呼ぶ entry-th pre-defined function を作成 する。entry-th pre-defined function は cbtype と entry で指定され る。cbtype はコールバックのプロトタイプ。cbtype については Type specifiers も参照。
get_callback(cbtype, entry)
上記 set_callback 関数によって与えられた Proc オブジェクトを返す。
malloc(size, [free = nil])
size バイトのメモリ領域を割り当て、PtrData オブジェクトを ptr とし て返す。
strdup(str)
文字列 str を複製した新しい文字列へのポインタに相当する PtrData オ ブジェクトを返す。
sizeof(type)
型のサイズを返す。 sizeof("C") + sizeof("L") は、 sizeof("CL") と等価ではない。後者は構造体 struct foo { char c; long l; } の十分なサイズを返すと推定されるが、そのサイズは C の sizeof(foo) と同じではないかもしれない。
(訳注: sizeof メソッドは独自にアラインメントを考慮してサイズを決定 するが C 言語のそれとは異なるかもしれないということを言っている)
(訳注: sizeof("L3") のように型の後に数字を付けることもできる。指定 できる型については Type specifiers を参照)
プロトタイプは以下の型修飾子から成る。プロトタイプの最初の要素は戻り値 の型を意味する。残りの要素は各引数の型を意味する。
C : 文字 (char) c : 文字を指すポインタ (char *) H : short 整数 (short) h : short 整数を指すポインタ (short *) I : 整数 (char, short, int) i : 整数を指すポインタ (char *, short *, int *) L : long 整数 (long) l : long 整数へのポインタ (long *) F : 実数 (float) f : 実数へのポインタ (float *) D : 実数 (double) d : 実数へのポインタ(double *) S : 不変(immutable)の文字列 (const char *) s : 変更可能(mutable)な文字列 (char *) A : 配列 (const type[]) a : 変更可能(mutable)な配列 (type[]) P : ポインタ (void *) p : 変更可能(mutable)なポインタ (void *) 0 : void 関数(これはプロトタイプの最初の文字でなければならない)
cbtype は型修飾子 0, C, I, H, L, F, D, S そして P から成る。例えば:
DL.callback('IPP'){|ptr1,ptr2| str1 = ptr1.ptr.to_s str2 = ptr2.ptr.to_s str1 <=> str2 }