Module: WindowsCOM::COMVtbl_

Defined in:
lib/windows_com/common.rb

Class Method Summary collapse

Class Method Details

.[](parent_vtbl, spec) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/windows_com/common.rb', line 101

def self.[](parent_vtbl, spec)
  spec.each { |name, sig|
    sig[0].unshift(:pointer) # prepend *this* pointer

  }

  Class.new(FFI::Struct) {
    const_set :ParentVtbl, parent_vtbl

    const_set :Spec, {}
    self::Spec.merge!(self::ParentVtbl::Spec) if self::ParentVtbl
    self::Spec.merge!(spec)

    layout_args = self::Spec.map { |name, sig|
      params, ret = sig
      [name, callback(params, ret)]
    }
    layout_args.flatten!
    layout(*layout_args)
  }
end