class Fzeet::Windows::SAFEARRAY

Public Class Methods

vector(length, vt = :variant) { |sa;| ... } click to toggle source
# File lib/fzeet/windows/oleaut/SafeArray.rb, line 22
def self.vector(length, vt = :variant)
        raise 'Not implemented.' if vt != :variant

        raise 'SafeArrayCreateVector failed.' if
                (psa = Windows.SafeArrayCreateVector(Windows.const_get("VT_#{vt.upcase}"), 0, length)).null?

        sa = new(psa)

        if block_given?
                yield sa; sa.dispose; return nil
        end

        sa
end

Public Instance Methods

[](i) click to toggle source
# File lib/fzeet/windows/oleaut/SafeArray.rb, line 49
def [](i)
        return old_get(i) if i.kind_of?(Symbol)

        FFI::MemoryPointer.new(:long) { |pi|
                pi.put_long(0, i)

                Windows.DetonateHresult(:SafeArrayGetElement, self, pi, v = VARIANT.new)

                return v
        }
end
Also aliased as: old_get, get
[]=(i, v) click to toggle source
# File lib/fzeet/windows/oleaut/SafeArray.rb, line 65
def []=(i, v)
        return old_put(i, v) if i.kind_of?(Symbol)

        FFI::MemoryPointer.new(:long) { |pi|
                pi.put_long(0, i)

                Windows.DetonateHresult(:SafeArrayPutElement, self, pi, v)
        }

        self
end
Also aliased as: old_put, put
destroy() click to toggle source
# File lib/fzeet/windows/oleaut/SafeArray.rb, line 79
def destroy; Windows.DetonateHresult(:SafeArrayDestroy, self) end
Also aliased as: dispose
dispose()
Alias for: destroy
each() { |self| ... } click to toggle source
# File lib/fzeet/windows/oleaut/SafeArray.rb, line 82
def each; length.times { |i| yield self[i] }; self end
get(i)
Alias for: []
length(dim = 0) click to toggle source
# File lib/fzeet/windows/oleaut/SafeArray.rb, line 37
def length(dim = 0) raise 'Not implemented.' if dim != 0; self[:rgsabound][dim][:cElements] end
old_get(i)
Alias for: []
old_put(i, v)
Alias for: []=
put(i, v)
Alias for: []=
vt() click to toggle source
# File lib/fzeet/windows/oleaut/SafeArray.rb, line 39
def vt
        FFI::MemoryPointer.new(:ushort) { |pvt|
                Windows.DetonateHresult(:SafeArrayGetVartype, self, pvt)

                return pvt.get_ushort(0)
        }
end