dl/struct.rb

DL::Importable

概要

它提供了在(已添加过DL::Importable的)模块内定义结构体/共用体的功能。

方法

define_struct(contents), struct(contents)

定义结构体。欲知contents详情,请参考DL::Importable::Struct#initialize

define_union(contents), union(contents)

定义共用体。有关contents的详细情况,请参考上面的define_struct

DL::Importable::Memory

概要

用来封装DL::PtrData的类。使用dot形式就可以访问结构体和共用体中的元素。调用Struct、Union的实例的malloc、new方法时,就会生成Memory类的实例。因此,通常情况下没有必要直接生成。

方法

initialize(ptr, names, ty, len, enc, dec)

动态定义访问DL::PtrData对象ptr的各成员的方法。Struct,Union的实例会保存这些信息。

to_ptr

返回所保存的DL::PtrData对象。

size

调用DL::PtrData#size。

DL::Importable::Struct

方法

initialize(types, contents)

像下面这样把DL::Types的实例传给types,把结构体的定义传给contents

["int size",
 "char *str"]

这样生成的Struct对象的运作情况类似于下面的结构体。

struct {
  int size;
  char *str;
}
new(ptr)

返回Memory对象,其中保存着DL::PtrData对象ptr的信息。

malloc(size = nil)

划出size字节的内存空间,生成DL::PtrData对象,并返回一个保存着该对象的Memory对象。

DL::Importable::Union

与Struct基本相同,但它是面向共用体的类。

补充内容

上述方法和类实际上是定义在DL::Importable::Internal中的。

相关文件