168件ヒット
[1-100件を表示]
(0.029秒)
種類
- インスタンスメソッド (120)
- ライブラリ (36)
- 特異メソッド (12)
ライブラリ
-
fiddle
/ import (132)
クラス
-
Fiddle
:: CStruct (36)
モジュール
-
Fiddle
:: Importer (96)
キーワード
- bind (12)
-
create
_ value (12) - extern (12)
- fiddle (12)
-
fiddle
/ types (12) -
import
_ symbol (12) - size (12)
- sizeof (12)
- struct (12)
-
to
_ i (12) -
to
_ ptr (12) - union (12)
- value (12)
検索結果
先頭5件
-
fiddle
/ import (38060.0) -
fiddle ライブラリのための高レベルインターフェースを提供するライブラリです。
...の fiddle/import ライブラリを使います。
主な使い方は fiddle も参照してください。
=== 高度な使用法
==== ○○の配列を関数に渡したい
例えば与えられた長さ len の double の配列の和を計算する関数
double sum(double *arry, int len);......を呼び出したい場合は以下のように Array#pack を使用します。
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload './libsum.so'
extern 'double sum(double*, int)'
end
p M.sum([2.0, 3.0, 4.0].pack('d*'), 3) #=> 9.0
また与えられた文字列の配......ar(char **s, char *buf, int len)
があったとします。これを呼び出すにも以下のように Array#pack を使用します。
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload './libstrfirst.so'
extern 'void first_char(char **, char *, int)'
end
buf = '111'... -
Fiddle
:: Importer # sizeof(t) -> Integer (8106.0) -
C における sizeof(t) の値を返します。
...れ以外の場合は Pointer[t].size を返します。
@param t サイズを計算する対象
@raise Fiddle::DLError t として文字列を渡し、それが表している型を Fiddle が知らなかった
場合に発生します
例:
require 'fiddle/import'
module M
exte... -
Fiddle
:: CStruct # to _ i -> Integer (8100.0) -
保持している構造体の先頭アドレスを整数で返します。
保持している構造体の先頭アドレスを整数で返します。 -
Fiddle
:: CStruct # to _ ptr -> Fiddle :: Pointer (8100.0) -
保持している構造体へのポインタを返します。
保持している構造体へのポインタを返します。 -
Fiddle
:: CStruct . size -> Integer (8100.0) -
構造体のサイズをバイト数で返します。
構造体のサイズをバイト数で返します。
このメソッドが返す値は C の構造体としてのサイズです。
Ruby のオブジェクトとしてはより大きなメモリを消費しています。 -
Fiddle
:: Importer # import _ symbol(name) -> Fiddle :: Pointer (8100.0) -
取り込んだライブラリからシンボルをインポートします。
...取り込んだライブラリからシンボルをインポートします。
返り値はシンボルがロードされたメモリのアドレスを持つ Fiddle::Pointer
オブジェクトを返します。
@param name シンボル名(文字列)... -
Fiddle
:: Importer # bind(signature , *opts) { . . . } -> Fiddle :: Function (8042.0) -
Ruby のブロックを C の関数で wrap し、その関数をモジュールに インポートします。
...tion オブジェクトとして
取り出すことができます。
signature で関数の名前とシネグチャを指定します。例えば
"int compare(void*, void*)" のように指定します。
opts には :stdcall もしくは :cdecl を渡すことができ、
呼出規約を明示......ン
例
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, Fiddle::SIZEOF_INT, M["compare"])
p data.unpack("i!*") # => [-13, -1, 0, 32, 49, 180001]... -
Fiddle
:: Importer # union(signature) -> Class (8024.0) -
C の共用体型に対応する Ruby のクラスを構築して返します。
...n epoll_data
{
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} epoll_data_t;
は、Ruby上では
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "libc.so.6"
typealias("uint32_t", "unsigned int")
typealias("uint64_t", "unsigned long long")......EPollData = union(["void *ptr",
"int fd",
"uint32_t u32",
"uint64_t u64",
])
end
となります。
返されるクラスは Fiddle::CUnion を継承しています。
1.9.x ではこのメソッド... -
Fiddle
:: Importer # create _ value(type , val = nil) -> Fiddle :: CStruct (8018.0) -
型が type で要素名が "value" であるような構造体を 定義(Fiddle::Importer#struct)し、 その構造体のメモリを Fiddle::CStruct#malloc で確保し、 確保したメモリを保持しているオブジェクトを返します。
...type は "int", "void*" といった文字列で型を指定します。
val に nil 以外を指定すると、確保された構造体に
その値を代入します。
@param type 型を表す文字列
@param val 構造体に確保される初期値
例
require 'fiddle/import'
module M......extend Fiddle::Importer
end
v = M.value("int", 32)
p v.value # => 32
v.value = 48
p v.value # => 48...