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]