superclass=
type=module
library=dl
extended=
included=

UNIX の [[man:dlopen(3)]] や Windows の LoadLibrary() などのダイナミックリンカへの低レベルな
インターフェースを提供するモジュールです。

モジュール DL は 3 つのクラスから成っています。

: [[c:DL::Symbol]] 
  ダイナミックライブラリの関数のラッパークラスです。
: [[c:DL::PtrData]] 
  C のポインタのようなメモリブロックを表すクラスです。
: [[c:DL::Handle]] 
  オープンされたダイナミックライブラリを表すクラスです。


=== Type specifiers

プロトタイプは以下の型修飾子から成ります。プロトタイプの最初の要素は戻り値
の型を意味します。残りの要素は各引数の型を意味します。

: C
    文字 (char)
: c
    文字を指すポインタ (char *)
: H
    short 整数  (short)
: h
    short 整数を指すポインタ (short *)
: I
    整数 (char, short, int)
: i
    整数を指すポインタ (char *, short *, int *)
: L
    long int
: l
    long int へのポインタ (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
  }

=== Ruby のオブジェクトから C の型への変換

[[m:DL.#callback]] や [[m:DL::Handle#sym]] で指定した
型指定子に従って Ruby のオブジェクトと C の型は相互に変換されます。
