Class: Fzeet::Windows::VARIANT

Inherits:
FFI::Union
  • Object
show all
Includes:
AnonymousSupport
Defined in:
lib/fzeet/windows/oleaut/Variant.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from AnonymousSupport

#[], #[]=

Class Method Details

.[](type, value) ⇒ Object



125
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 125

def self.[](type, value) new.tap { |variant| variant.send("#{type}=", value) } end

Instance Method Details

#arrayObject



233
234
235
236
237
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 233

def array
	raise 'Wrong type tag.' unless self[:vt] & VT_ARRAY == VT_ARRAY

	SAFEARRAY.new(self[:parray])
end

#array=(array) ⇒ Object



239
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 239

def array=(array) clear; self[:vt] = VT_ARRAY | VT_VARIANT; self[:parray] = array end

#boolObject



127
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 127

def bool; raise 'Wrong type tag.' unless self[:vt] == VT_BOOL; self[:boolVal] != 0 end

#bool=(bool) ⇒ Object



128
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 128

def bool=(bool) clear; self[:vt] = VT_BOOL; self[:boolVal] = (bool) ? -1 : 0 end

#bstrObject Also known as: string



163
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 163

def bstr; raise 'Wrong type tag.' unless self[:vt] == VT_BSTR; BSTR.new(self[:bstrVal]).multibyte end

#bstr=(str) ⇒ Object Also known as: string=



164
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 164

def bstr=(str) clear; self[:vt] = VT_BSTR; self[:bstrVal] = BSTR[str].pointer end

#byref(deref = nil) ⇒ Object



241
242
243
244
245
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 241

def byref(deref = nil)
	raise 'Wrong type tag.' unless self[:vt] & VT_BYREF == VT_BYREF

	(deref) ? self[:byref].send("get_#{deref}", 0) : self[:byref]
end

#byref=(byref) ⇒ Object



247
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 247

def byref=(byref) clear; self[:vt] = VT_BYREF; self[:byref] = byref end

#clearObject



252
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 252

def clear; Windows.DetonateHresult(:VariantClear, self); self end

#dateObject Also known as: time



169
170
171
172
173
174
175
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 169

def date
	raise 'Wrong type tag.' unless self[:vt] == VT_DATE

	raise 'VariantTimeToSystemTime failed.' if Windows.VariantTimeToSystemTime(self[:date], st = SYSTEMTIME.new) == 0

	st.get
end

#date=(date) ⇒ Object Also known as: time=



177
178
179
180
181
182
183
184
185
186
187
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 177

def date=(date)
	clear

	self[:vt] = VT_DATE

	FFI::MemoryPointer.new(:double) { |pdate|
		raise 'SystemTimeToVariantTime failed.' if Windows.SystemTimeToVariantTime(SYSTEMTIME[date], pdate) == 0

		self[:date] = pdate.get_double(0)
	}
end

#decimal(as = :double) ⇒ Object



192
193
194
195
196
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 192

def decimal(as = :double)
	raise 'Wrong type tag.' unless self[:vt] == VT_DECIMAL

	DECIMAL.new(self[:decVal].pointer).send(as)
end

#decimal=(decimal) ⇒ Object



198
199
200
201
202
203
204
205
206
207
208
209
210
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 198

def decimal=(decimal)
	clear

	self[:vt] = VT_DECIMAL

	DECIMAL[decimal].tap { |dec|
		self[:decVal].members.each { |member|
			next if member == :wReserved # This is self[:vt]

			self[:decVal][member] = dec[member]
		}
	}
end

#objectObject



249
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 249

def object; ObjectSpace._id2ref(i4) end

#object=(object) ⇒ Object



250
# File 'lib/fzeet/windows/oleaut/Variant.rb', line 250

def object=(object) self.i4 = object.object_id end