module Puppet::Util::Windows::COM::Interface

code modified from Unknownr project github.com/rpeev/Unknownr licensed under MIT

Public Class Methods

[](*args) click to toggle source
   # File lib/puppet/util/windows/com.rb
68 def self.[](*args)
69   spec, iid, *ifaces = args.reverse
70 
71   spec.each { |name, signature| signature[0].unshift(:pointer) }
72 
73   Class.new(FFI::Struct) do
74     const_set(:IID, iid)
75 
76     vtable = Class.new(FFI::Struct) do
77       vtable_hash = Hash[(ifaces.map { |iface| iface::VTBL::SPEC.to_a } << spec.to_a).flatten(1)]
78       const_set(:SPEC, vtable_hash)
79 
80       layout(
81         *self::SPEC.map { |name, signature| [name, callback(*signature)] }.flatten
82       )
83     end
84 
85     const_set(:VTBL, vtable)
86 
87     layout \
88       :lpVtbl, :pointer
89   end
90 end