Module: WindowsCOM::COMInterface_

Defined in:
lib/windows_com/common.rb

Class Method Summary collapse

Class Method Details

.[](vtbl, siid) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/windows_com/common.rb', line 175

def self.[](vtbl, siid)
	Class.new {
		const_set :Vtbl, vtbl
		const_set :IID, WindowsCOM::GUID[siid]

		def initialize(pointer)
			@vptr = WindowsCOM::COMVptr_.new(pointer)
			@vtbl = self.class::Vtbl.new(@vptr[:lpVtbl])
		end

		attr_reader :vptr, :vtbl

		self::Vtbl.members.each { |name, sig|
			define_method(name) { |*args|
				hresult = @vtbl[name].call(@vptr, *args)

				raise "#{self}.#{name} failed (hresult: #{format('%#08x', hresult)})" if
					WindowsCOM::FAILED(hresult)

				hresult
			}
		}
	}
end