606件ヒット
[1-100件を表示]
(0.034秒)
ライブラリ
- ビルトイン (10)
-
fiddle
/ import (144)
クラス
- Array (10)
-
Fiddle
:: CStruct (60)
モジュール
-
Fiddle
:: Importer (72)
キーワード
-
1
. 6 . 8から1 . 8 . 0への変更点(まとめ) (12) - CStruct (12)
-
DATA
_ PTR (12) -
Data
_ Get _ Struct (12) -
Data
_ Wrap _ Struct (12) -
NEWS for Ruby 2
. 0 . 0 (12) -
NEWS for Ruby 2
. 2 . 0 (11) -
NEWS for Ruby 2
. 3 . 0 (10) -
NEWS for Ruby 2
. 5 . 0 (8) -
NEWS for Ruby 3
. 1 . 0 (4) - Ruby用語集 (12)
-
blk
_ copy _ prev (12) -
blk
_ free (12) -
blk
_ mark (12) -
bm
_ mark (12) -
create
_ value (12) - dig (10)
-
dyna
_ pop (12) -
dyna
_ push (12) -
fc
_ i (12) -
fc
_ path (12) - fiddle (12)
-
fiddle
/ import (12) -
fiddle
/ types (12) -
frame
_ dup (12) -
gvar
_ i (12) -
ivar
_ i (12) - malloc (12)
-
mark
_ global _ entry (12) - new (12)
-
new
_ blktag (12) -
new
_ dvar (12) -
rb
_ exec _ arg _ fixup (1) -
rb
_ gc _ mark _ frame (12) -
rb
_ global _ entry (12) -
rb
_ reserved _ word (12) -
rb
_ thread _ wait _ for (12) -
rb
_ timespec _ now (10) -
remove
_ trace (12) -
ruby 1
. 6 feature (12) -
ruby 1
. 8 . 2 feature (12) -
ruby 1
. 9 feature (12) -
scope
_ dup (12) - size (12)
- sizeof (12)
-
to
_ i (12) -
to
_ ptr (12) - typealias (12)
-
undef
_ setter (12) - union (12)
-
val
_ setter (12) - value (12)
検索結果
先頭5件
-
Fiddle
:: Importer # struct(signature) -> Class (21119.0) -
C の構造体型に対応する Ruby のクラスを構築して返します。
...れを
配列で signature に渡してデータを定義します。例えば C における
struct timeval {
long tv_sec;
long tv_usec;
};
という構造体型に対応して
Timeval = struct(["long tv_sec", "long tv_usec"])
として構造体に対応するクラスを生成しま......セサ
返されるクラスは Fiddle::CStruct を継承しています。詳しくは
そちらを参照してください。
@param signature 構造体の各要素を文字列で表現したものの配列
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "libc.so.......6"
extern "int gettimeofday(void*, void*)"
Timeval = struct(["long tv_sec", "long tv_usec"])
end
time = M::Timeval.malloc
M.gettimeofday(time, Fiddle::NULL)
p time.tv_sec
p time.tv_usec... -
Fiddle
:: CStruct (9024.0) -
C の構造体を表すクラスです。
...構造体を表すクラスです。
このクラスは直接は使わず、Fiddle::Importer#struct を用いて
このクラスを継承したクラスを生成し、それを利用します。
Fiddle::Importer#struct が生成するクラスには
構造体の各メンバへのアクセサが定......ます。
例えば
require 'fiddle/import'
include Fiddle::Importer
S = struct(["long foo", "void* bar"])
とすると、 S#foo, S#foo= というアクセサが Integer とやりとり
するように定義され、 S#bar, S#bar= というアクセサが Fiddle::Pointer
でやりとりする......義されます。
このクラスは実際にはこのドキュメントに書かれているメソッドを保持していません。
Fiddle::Importer#struct によって動的にメソッドが定義されます。
このドキュメントは説明の便宜のためだと考えてください... -
VALUE Data
_ Wrap _ Struct(VALUE klass , RUBY _ DATA _ FUNC mark , RUBY _ DATA _ FUNC free , void *sval) (6224.0) -
C の構造体 sval をラップして klass クラスの インスタンスである Ruby オブジェクトを生成し、それを返します。 mark、free はそれぞれ sval のマーク用・解放用の 関数へのポインタです。どちらも、必要ないときはかわりに 0 を渡します。
...。
typedef void (*RUBY_DATA_FUNC)(void *st)
第一引数 st には sval が渡されます。
使用例
struct mytype {
int i;
char *s;
};
VALUE
my_s_new(klass)
VALUE klass;
{
struct mytype *m = malloc(sizeof(struct mytype));
m->i......= 0;
m->s = 0;
return Data_Wrap_Struct(MyClass, 0, free_my, m);
}... -
void Data
_ Get _ Struct(VALUE obj , type , type *svar) (6224.0) -
Ruby のオブジェクト obj から type 型へのポインタを とりだし svar に代入します。
...j から type 型へのポインタを
とりだし svar に代入します。
使用例
struct mytype {
int i;
char *s;
};
VALUE
my_i(VALUE self)
{
struct mytype *m;
Data_Get_Struct(self, struct mytype, m);
return INT2NUM(m->i);
}... -
Fiddle
:: CStruct . malloc -> Fiddle :: CStruct (6212.0) -
構造体のためのメモリを確保し、Fiddle::CStruct の(子孫クラスの) オブジェクトで返します。
...構造体のためのメモリを確保し、Fiddle::CStruct の(子孫クラスの)
オブジェクトで返します。
C における
return (struct foo*)malloc(sizeof(struct foo));
というコードと対応していると言えます。... -
Fiddle
:: CStruct . new(addr) -> Fiddle :: CStruct (6206.0) -
addr のアドレスが指すメモリを構造体のアドレスとみなし、 構造体を作ります。
...addr のアドレスが指すメモリを構造体のアドレスとみなし、
構造体を作ります。
C におけるキャストと似ています。
return (struct foo*)addr;
というコードと対応していると言えます。
@param addr アドレス... -
Fiddle
:: CStruct # to _ ptr -> Fiddle :: Pointer (6100.0) -
保持している構造体へのポインタを返します。
保持している構造体へのポインタを返します。 -
fiddle
/ import (6012.0) -
fiddle ライブラリのための高レベルインターフェースを提供するライブラリです。
...fiddle ライブラリのための高レベルインターフェースを提供するライブラリです。
通常は fiddle ライブラリを使わずこの fiddle/import ライブラリを使います。
主な使い方は fiddle も参照してください。
=== 高度な使用法
====......re '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
また与えられた文字列の配列 s (長さlen)の各要素の最初の文字を buf にコピーする関数
void firs......M.qsort(a, buff.size, Fiddle::SIZEOF_VOIDP, M::QsortCallback)
p a.unpack('l!*').map{|t| Fiddle.dlunwrap(t).to_i } #=> [1, 10, 100, 1241603848]
==== 複雑な構造体を定義したい
構造体をメンバとして持つ構造体を Fiddle::Importer#struct を使って定義する... -
fiddle (6006.0)
-
*.dllや*.soなど、ダイナミックリンクライブラリを扱うためのライブラリです。
...わりに使います。
=== 使い方
通常は fiddle/import ライブラリを require して
Fiddle::Importer モジュールを使用します。
Fiddle モジュール自体はプリミティブな機能しか提供していません。
Fiddle::Importer モジュールは以下のように......ユーザが定義した
モジュールを拡張する形で使います。
require "fiddle/import"
module M
extend Fiddle::Importer
end
以後、このモジュールで dlload や extern などのメソッドが使用できるようになります。
以下のように dlload を使......って現在時刻を得たい場合は以下のとおりです。
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "libc.so.6"
extern('int gettimeofday(void *, void *)')
Timeval = struct( ["long tv_sec",
"long tv_usec"])
end
timeval = M::Timev...