Module: WindowsCOM::COMVtbl_

Defined in:
lib/windows_com/common.rb

Class Method Summary collapse

Class Method Details

.[](parent_vtbl, spec) ⇒ Object



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/windows_com/common.rb', line 152

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

	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