22件ヒット
[1-22件を表示]
(0.033秒)
別のキーワード
検索結果
-
Fiddle
:: Importer # bind(signature , *opts) { . . . } -> Fiddle :: Function (18313.0) -
Ruby のブロックを C の関数で wrap し、その関数をモジュールに インポートします。
...す。
これでインポートされた関数はモジュール関数として定義されます。
また、Fiddle::Importer#[] で Fiddle::Function オブジェクトとして
取り出すことができます。
signature で関数の名前とシネグチャを指定します。例えば
"int......す Fiddle::Function オブジェクトを返します。
@param signature 関数の名前とシネグチャ
@param opts オプション
例
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "libc.so.6"
typealias "size_t", "unsigned long"
extern "int qsort(void......*, size_t, size_t, void*)"
bind("int compare(void*, void*)"){|px, py|
x = px.to_s(Fiddle::SIZEOF_INT).unpack("i!")
y = py.to_s(Fiddle::SIZEOF_INT).unpack("i!")
x <=> y
}
end
data = [32, 180001, -13, -1, 0, 49].pack("i!*")
M.qsort(Fiddle::Pointer[data], 6, Fid... -
fiddle (66.0)
-
*.dllや*.soなど、ダイナミックリンクライブラリを扱うためのライブラリです。
...end
以後、このモジュールで dlload や extern などのメソッドが使用できるようになります。
以下のように dlload を使ってライブラリをロードし、
使用したいライブラリ関数に対して extern メソッドを呼んで
ラッパーメソッド......ル関数 bind を使用したコールバックを定義できます。
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "libc.so.6"
QsortCallback = bind("void *qsort_callback2(void*,void*)"){|ptr1,ptr2|
ptr1[0] <=> ptr2[0]
}
type
extern 'void qso......"3465721"
M.qsort(buff, buff.size, 1, M::QsortCallback)
p buff #=> "1234567"
ここで M::QsortCallback はブロックを呼ぶ Fiddle::Function オブジェクトです。
==== ポインタを扱う
fiddle においては、文字列/整数/Fiddle::Pointerをポインタとして
扱う...