module Unknownr::Windows::COM::Interface

Public Class Methods

[](*args) click to toggle source
# File lib/unknownr.rb, line 105
def self.[](*args)
        spec, iid, *ifaces = args.reverse

        spec.each { |name, signature| signature[0].unshift(:pointer) }

        Class.new(FFI::Struct) {
                const_set(:IID, iid)

                const_set(:VTBL, Class.new(FFI::Struct) {
                        const_set(:SPEC, Hash[(ifaces.map { |iface| iface::VTBL::SPEC.to_a } << spec.to_a).flatten(1)])

                        layout \
                                *self::SPEC.map { |name, signature| [name, callback(*signature)] }.flatten
                })

                layout \
                        :lpVtbl, :pointer
        }
end