Module Ole::Types::Variant
In: lib/ole/types/base.rb
String Data Lpstr Clsid Lpwstr Section Enumerable DateTime FileTime Constants Variant::Constants Storage\n[lib/ole/storage/base.rb\nlib/ole/storage/file_system.rb\nlib/ole/storage/meta_data.rb] PropertySet lib/ole/storage/file_system.rb lib/ole/types/property_set.rb lib/ole/types/base.rb Constants Constants Variant Types Ole dot/m_9_0.png

The OLE variant types, extracted from www.marin.clara.net/COM/variant_type_definitions.htm.

A subset is also in WIN32OLE::VARIANT, but its not cross platform (obviously).

Use like:

  p Ole::Types::Variant::NAMES[0x001f] => 'VT_LPWSTR'
  p Ole::Types::VT_DATE # => 7

The serialization / deserialization functions should be fixed to make it easier to work with. like

  Ole::Types.from_str(VT_DATE, data) # and
  Ole::Types.to_str(VT_DATE, data)

Or similar, rather than having to do VT_* <=> ad hoc class name etc as it is currently.

Methods

dump   load  

Classes and Modules

Module Ole::Types::Variant::Constants

Constants

NAMES = { 0x0000 => 'VT_EMPTY', 0x0001 => 'VT_NULL', 0x0002 => 'VT_I2', 0x0003 => 'VT_I4', 0x0004 => 'VT_R4', 0x0005 => 'VT_R8', 0x0006 => 'VT_CY', 0x0007 => 'VT_DATE', 0x0008 => 'VT_BSTR', 0x0009 => 'VT_DISPATCH', 0x000a => 'VT_ERROR', 0x000b => 'VT_BOOL', 0x000c => 'VT_VARIANT', 0x000d => 'VT_UNKNOWN', 0x000e => 'VT_DECIMAL', 0x0010 => 'VT_I1', 0x0011 => 'VT_UI1', 0x0012 => 'VT_UI2', 0x0013 => 'VT_UI4', 0x0014 => 'VT_I8', 0x0015 => 'VT_UI8', 0x0016 => 'VT_INT', 0x0017 => 'VT_UINT', 0x0018 => 'VT_VOID', 0x0019 => 'VT_HRESULT', 0x001a => 'VT_PTR', 0x001b => 'VT_SAFEARRAY', 0x001c => 'VT_CARRAY', 0x001d => 'VT_USERDEFINED', 0x001e => 'VT_LPSTR', 0x001f => 'VT_LPWSTR', 0x0040 => 'VT_FILETIME', 0x0041 => 'VT_BLOB', 0x0042 => 'VT_STREAM', 0x0043 => 'VT_STORAGE', 0x0044 => 'VT_STREAMED_OBJECT', 0x0045 => 'VT_STORED_OBJECT', 0x0046 => 'VT_BLOB_OBJECT', 0x0047 => 'VT_CF', 0x0048 => 'VT_CLSID', 0x0fff => 'VT_ILLEGALMASKED', 0x0fff => 'VT_TYPEMASK', 0x1000 => 'VT_VECTOR', 0x2000 => 'VT_ARRAY', 0x4000 => 'VT_BYREF', 0x8000 => 'VT_RESERVED', 0xffff => 'VT_ILLEGAL'
CLASS_MAP = { # haven't seen one of these. wonder if its same as FILETIME? #'VT_DATE' => ?, 'VT_LPSTR' => Lpstr, 'VT_LPWSTR' => Lpwstr, 'VT_FILETIME' => FileTime, 'VT_CLSID' => Clsid

Public Class methods

[Source]

     # File lib/ole/types/base.rb, line 229
229:                         def self.dump type, variant
230:                                 type = NAMES[type] or raise ArgumentError, 'unknown ole type - 0x%04x' % type
231:                                 (CLASS_MAP[type] || Data).dump variant
232:                         end

[Source]

     # File lib/ole/types/base.rb, line 224
224:                         def self.load type, str
225:                                 type = NAMES[type] or raise ArgumentError, 'unknown ole type - 0x%04x' % type
226:                                 (CLASS_MAP[type] || Data).load str
227:                         end

[Validate]