Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > dlライブラリ > DLモジュール
クラスの継承リスト: DL
UNIX の dlopen(3) や Windows の LoadLibrary() などのダイナミックリンカへの低レベルな インターフェースを提供するモジュールです。
モジュール DL は 3 つのクラスから成っています。
ダイナミックライブラリの関数のラッパークラスです。
C のポインタのようなメモリブロックを表すクラスです。
オープンされたダイナミックライブラリを表すクラスです。
プロトタイプは以下の型修飾子から成ります。プロトタイプの最初の要素は戻り値 の型を意味します。残りの要素は各引数の型を意味します。
文字 (char)
文字を指すポインタ (char *)
short 整数 (short)
short 整数を指すポインタ (short *)
整数 (char, short, int)
整数を指すポインタ (char *, short *, int *)
long int
long int へのポインタ (long *)
実数 (float)
実数へのポインタ (float *)
実数 (double)
実数へのポインタ(double *)
不変 (immutable) の文字列 (const char *)
変更可能(mutable)な文字列 (char *)
配列 (const type[])
変更可能 (mutable) な配列 (type[])
ポインタ (void *)
変更可能 (mutable) なポインタ (void *)
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 }
DL.#callback や DL::Handle#sym で指定した 型指定子に従って Ruby のオブジェクトと C の型は相互に変換されます。
last_error
[permalink][rdoc]last_error=
[TODO]
win32_last_error
[permalink][rdoc]win32_last_error=
[TODO]
callback(type) -> DL::Symbol
[permalink][rdoc]define_callback(type) -> DL::Symbol
[TODO]
Cレベルのコールバック関数を定義し、その関数(へのポインタ)を保持した DL::Symbol を返します。
require 'dl/import' strlast = DL.callback('IS'){|s| s[-1] } module M extend DL::Importable dlload "./libtest.so" extern "int call(void *, const char*)" end p LIBC.call(strlast, "abcd").chr #=> "d"
/* libtest.so */ int call(int (*cb)(const char*), const char* s){ return (*cb)(s); }
dlopen(lib) -> DL::Handle
[permalink][rdoc]dlopen(lib) {|handle| ... } -> DL::Handle
ダイナミックライブラリ lib をロードし、 DL::Handle として返します。
ブロックが与えられている場合は、DL::Handle 引数として 与えられたブロックを実行します。DL::Handle を返します。
DL::Handle.new(lib) と等価です。
malloc(size) -> DL::PtrData
[permalink][rdoc]size バイトのメモリ領域を確保し、 その領域を指す DL::PtrData オブジェクトを返します。
この返り値には、DL::FREE が free 関数としてセットされています。
remove_callback(sym) -> nil
[permalink][rdoc]コールバック関数 sym を DL::FuncTable から削除します。 以後 sym.call を呼ぶことができなくなります。
sizeof(type) -> Integer
[permalink][rdoc]型のサイズを返します。
sizeof("C") + sizeof("L") は、sizeof("CL") と等価ではありません。 後者は構造体 struct foo { char c; long l; } の 十分なサイズを返すと推定されますが、 そのサイズは C の sizeof(foo) と同じではないかもしれません。 つまり、sizeof メソッドは独自にアラインメントを考慮してサイズを決定 しますが、 C 言語のそれとは異なるかもしれません。
sizeof("L3") のように型の後に数字を付けることもできます。 指定できる型については DL を参照してください。
strdup(str) -> DL::PtrData
[permalink][rdoc]文字列 str を複製し、その新しい文字列へのポインタ DL::PtrData オブジェクトを返します。
この返り値には、DL::FREE が free 関数としてセットされています。
ALIGN_DOUBLE
[permalink][rdoc][TODO]
ALIGN_FLOAT
[permalink][rdoc][TODO]
ALIGN_INT
[permalink][rdoc][TODO]
ALIGN_LONG
[permalink][rdoc][TODO]
ALIGN_SHORT
[permalink][rdoc][TODO]
ALIGN_VOIDP
[permalink][rdoc][TODO]
DLSTACK
[permalink][rdoc][TODO]
FREE
[permalink][rdoc][TODO]
free(3) を表す DL::Symbol です。 この定数に新たに DL::Symbol を代入しても、DL::PtrData にデフォルトでセットされる free 関数が変わることはありません。
FuncTable
[permalink][rdoc][TODO]
MAX_ARG
[permalink][rdoc][TODO]
RTLD_GLOBAL
[permalink][rdoc][TODO]
RTLD_LAZY
[permalink][rdoc][TODO]
RTLD_NOW
[permalink][rdoc][TODO]