javafish.clients.opc.variant
Class VariantTypes

java.lang.Object
  extended by javafish.clients.opc.variant.VariantTypes
Direct Known Subclasses:
Variant

public class VariantTypes
extends java.lang.Object

The Variant types as defined by Microsoft's COM. I found this information in http://www.marin.clara.net/COM/variant_type_definitions.htm.

In the variant types descriptions the following shortcuts are used: [V] - may appear in a VARIANT, [T] - may appear in a TYPEDESC, [P] - may appear in an OLE property set, [S] - may appear in a Safe Array.

Since:
2002-02-09
Version:
$Id: Variant.java,v 1.10 2004/04/09 13:05:16 glens Exp $
Author:
Rainer Klute (klute@rainer-klute.de)

Field Summary
static long EPOCH_DIFF
          The difference between the Windows epoch (1601-01-01 00:00:00) and the Unix epoch (1970-01-01 00:00:00) in milliseconds: 11644473600000L.
static java.lang.Integer LENGTH_0
           Denotes a variant type with a length of 0 bytes.
static java.lang.Integer LENGTH_2
           Denotes a variant type with a length of 2 bytes.
static java.lang.Integer LENGTH_4
           Denotes a variant type with a length of 4 bytes.
static java.lang.Integer LENGTH_8
           Denotes a variant type with a length of 8 bytes.
static java.lang.Integer LENGTH_UNKNOWN
           Denotes a variant type with a length that is unknown to c yet.
static java.lang.Integer LENGTH_VARIABLE
           Denotes a variant type with a variable length.
static int VT_ARRAY
           [V] SAFEARRAY*.
static int VT_BLOB
          [P] Length prefixed bytes.
static int VT_BLOB_OBJECT
          [P] Blob contains an object.
static int VT_BOOL
           [V][T][P][S] True=-1, False=0.
static int VT_BSTR
           [V][T][P][S] OLE Automation string.
static int VT_BYREF
           [V] void* for local use.
static int VT_CARRAY
           [T] C style array.
static int VT_CF
          [P] Clipboard format.
static int VT_CLSID
          [P] A Class ID.
static int VT_CY
           [V][T][P][S] currency.
static int VT_DATE
           [V][T][P][S] date.
static int VT_DECIMAL
           [V][T][S] 16 byte fixed point.
static int VT_DISPATCH
           [V][T][P][S] IDispatch *.
static int VT_EMPTY
           [V][P] Nothing, i.e. not a single byte of data.
static int VT_ERROR
           [V][T][S] SCODE.
static int VT_FILETIME
           [P] FILETIME.
static int VT_HRESULT
           [T] Standard return type.
static int VT_I1
           [T] signed char.
static int VT_I2
           [V][T][P][S] 2 byte signed int.
static int VT_I4
           [V][T][P][S] 4 byte signed int.
static int VT_I8
           [T][P] signed 64-bit int.
static int VT_ILLEGAL
           FIXME (3): Document this!
static int VT_ILLEGALMASKED
           FIXME (3): Document this!
static int VT_INT
           [T] signed machine int.
static int VT_LPSTR
           [T][P] null terminated string.
static int VT_LPWSTR
           [T][P] wide (Unicode) null terminated string.
static int VT_NULL
           [V][P] SQL style Null.
static int VT_PTR
           [T] pointer type.
static int VT_R4
           [V][T][P][S] 4 byte real.
static int VT_R8
           [V][T][P][S] 8 byte real.
static int VT_RESERVED
           FIXME (3): Document this!
static int VT_SAFEARRAY
           [T] (use VT_ARRAY in VARIANT).
static int VT_STORAGE
          [P] Name of the storage follows.
static int VT_STORED_OBJECT
          [P] Storage contains an object.
static int VT_STREAM
          [P] Name of the stream follows.
static int VT_STREAMED_OBJECT
          [P] Stream contains an object.
static int VT_TYPEMASK
           FIXME (3): Document this!
static int VT_UI1
           [V][T][P][S] unsigned char.
static int VT_UI2
           [T][P] unsigned short.
static int VT_UI4
           [T][P] unsigned int.
static int VT_UI8
           [T][P] unsigned 64-bit int.
static int VT_UINT
           [T] unsigned machine int.
static int VT_UNKNOWN
           [V][T][S] IUnknown *.
static int VT_USERDEFINED
           [T] user defined type.
static int VT_VARIANT
           [V][T][P][S] VARIANT *.
static int VT_VECTOR
           [P] simple counted array.
static int VT_VOID
           [T] C style void.
 
Constructor Summary
VariantTypes()
           
 
Method Summary
static long dateToFileTime(java.util.Date date)
           Converts a Date into a filetime.
static java.util.Date filetimeToDate(int high, int low)
          Converts a Windows FILETIME into a Date.
static int getVariantLength(long variantType)
          Returns a variant type's length.
static java.lang.String getVariantName(long variantType)
           Returns the variant type name associated with a variant type number.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

VT_EMPTY

public static final int VT_EMPTY

[V][P] Nothing, i.e. not a single byte of data.

See Also:
Constant Field Values

VT_NULL

public static final int VT_NULL

[V][P] SQL style Null.

See Also:
Constant Field Values

VT_I2

public static final int VT_I2

[V][T][P][S] 2 byte signed int.

See Also:
Constant Field Values

VT_I4

public static final int VT_I4

[V][T][P][S] 4 byte signed int.

See Also:
Constant Field Values

VT_R4

public static final int VT_R4

[V][T][P][S] 4 byte real.

See Also:
Constant Field Values

VT_R8

public static final int VT_R8

[V][T][P][S] 8 byte real.

See Also:
Constant Field Values

VT_CY

public static final int VT_CY

[V][T][P][S] currency. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_DATE

public static final int VT_DATE

[V][T][P][S] date. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_BSTR

public static final int VT_BSTR

[V][T][P][S] OLE Automation string. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_DISPATCH

public static final int VT_DISPATCH

[V][T][P][S] IDispatch *. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_ERROR

public static final int VT_ERROR

[V][T][S] SCODE. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_BOOL

public static final int VT_BOOL

[V][T][P][S] True=-1, False=0.

See Also:
Constant Field Values

VT_VARIANT

public static final int VT_VARIANT

[V][T][P][S] VARIANT *. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_UNKNOWN

public static final int VT_UNKNOWN

[V][T][S] IUnknown *. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_DECIMAL

public static final int VT_DECIMAL

[V][T][S] 16 byte fixed point.

See Also:
Constant Field Values

VT_I1

public static final int VT_I1

[T] signed char.

See Also:
Constant Field Values

VT_UI1

public static final int VT_UI1

[V][T][P][S] unsigned char.

See Also:
Constant Field Values

VT_UI2

public static final int VT_UI2

[T][P] unsigned short.

See Also:
Constant Field Values

VT_UI4

public static final int VT_UI4

[T][P] unsigned int.

See Also:
Constant Field Values

VT_I8

public static final int VT_I8

[T][P] signed 64-bit int.

See Also:
Constant Field Values

VT_UI8

public static final int VT_UI8

[T][P] unsigned 64-bit int.

See Also:
Constant Field Values

VT_INT

public static final int VT_INT

[T] signed machine int.

See Also:
Constant Field Values

VT_UINT

public static final int VT_UINT

[T] unsigned machine int.

See Also:
Constant Field Values

VT_VOID

public static final int VT_VOID

[T] C style void.

See Also:
Constant Field Values

VT_HRESULT

public static final int VT_HRESULT

[T] Standard return type. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_PTR

public static final int VT_PTR

[T] pointer type. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_SAFEARRAY

public static final int VT_SAFEARRAY

[T] (use VT_ARRAY in VARIANT).

See Also:
Constant Field Values

VT_CARRAY

public static final int VT_CARRAY

[T] C style array. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_USERDEFINED

public static final int VT_USERDEFINED

[T] user defined type. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_LPSTR

public static final int VT_LPSTR

[T][P] null terminated string.

See Also:
Constant Field Values

VT_LPWSTR

public static final int VT_LPWSTR

[T][P] wide (Unicode) null terminated string.

See Also:
Constant Field Values

VT_FILETIME

public static final int VT_FILETIME

[P] FILETIME. The FILETIME structure holds a date and time associated with a file. The structure identifies a 64-bit integer specifying the number of 100-nanosecond intervals which have passed since January 1, 1601. This 64-bit value is split into the two dwords stored in the structure.

See Also:
Constant Field Values

VT_BLOB

public static final int VT_BLOB

[P] Length prefixed bytes.

See Also:
Constant Field Values

VT_STREAM

public static final int VT_STREAM

[P] Name of the stream follows.

See Also:
Constant Field Values

VT_STORAGE

public static final int VT_STORAGE

[P] Name of the storage follows.

See Also:
Constant Field Values

VT_STREAMED_OBJECT

public static final int VT_STREAMED_OBJECT

[P] Stream contains an object. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_STORED_OBJECT

public static final int VT_STORED_OBJECT

[P] Storage contains an object. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_BLOB_OBJECT

public static final int VT_BLOB_OBJECT

[P] Blob contains an object. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_CF

public static final int VT_CF

[P] Clipboard format. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_CLSID

public static final int VT_CLSID

[P] A Class ID.

It consists of a 32 bit unsigned integer indicating the size of the structure, a 32 bit signed integer indicating (Clipboard Format Tag) indicating the type of data that it contains, and then a byte array containing the data.

The valid Clipboard Format Tags are:

typedef struct tagCLIPDATA {
 // cbSize is the size of the buffer pointed to
 // by pClipData, plus sizeof(ulClipFmt)
 ULONG              cbSize;
 long               ulClipFmt;
 BYTE*              pClipData;
 } CLIPDATA;

See msdn.microsoft.com/library/en-us/com/stgrstrc_0uwk.asp.

See Also:
Constant Field Values

VT_VECTOR

public static final int VT_VECTOR

[P] simple counted array. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_ARRAY

public static final int VT_ARRAY

[V] SAFEARRAY*. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_BYREF

public static final int VT_BYREF

[V] void* for local use. How long is this? How is it to be interpreted?

See Also:
Constant Field Values

VT_RESERVED

public static final int VT_RESERVED

FIXME (3): Document this!

See Also:
Constant Field Values

VT_ILLEGAL

public static final int VT_ILLEGAL

FIXME (3): Document this!

See Also:
Constant Field Values

VT_ILLEGALMASKED

public static final int VT_ILLEGALMASKED

FIXME (3): Document this!

See Also:
Constant Field Values

VT_TYPEMASK

public static final int VT_TYPEMASK

FIXME (3): Document this!

See Also:
Constant Field Values

LENGTH_UNKNOWN

public static final java.lang.Integer LENGTH_UNKNOWN

Denotes a variant type with a length that is unknown to c yet.


LENGTH_VARIABLE

public static final java.lang.Integer LENGTH_VARIABLE

Denotes a variant type with a variable length.


LENGTH_0

public static final java.lang.Integer LENGTH_0

Denotes a variant type with a length of 0 bytes.


LENGTH_2

public static final java.lang.Integer LENGTH_2

Denotes a variant type with a length of 2 bytes.


LENGTH_4

public static final java.lang.Integer LENGTH_4

Denotes a variant type with a length of 4 bytes.


LENGTH_8

public static final java.lang.Integer LENGTH_8

Denotes a variant type with a length of 8 bytes.


EPOCH_DIFF

public static final long EPOCH_DIFF

The difference between the Windows epoch (1601-01-01 00:00:00) and the Unix epoch (1970-01-01 00:00:00) in milliseconds: 11644473600000L. (Use your favorite spreadsheet program to verify the correctness of this value. By the way, did you notice that you can tell from the epochs which operating system is the modern one? :-))

See Also:
Constant Field Values
Constructor Detail

VariantTypes

public VariantTypes()
Method Detail

getVariantName

public static java.lang.String getVariantName(long variantType)

Returns the variant type name associated with a variant type number.

Parameters:
variantType - The variant type number
Returns:
The variant type name or the string "unknown variant type"

getVariantLength

public static int getVariantLength(long variantType)

Returns a variant type's length.

Parameters:
variantType - The variant type number
Returns:
The length of the variant type's data in bytes. If the length is variable, i.e. the length of a string, -1 is returned. If class does not know the length, -2 is returned. The latter usually indicates an unsupported variant type.

filetimeToDate

public static java.util.Date filetimeToDate(int high,
                                            int low)

Converts a Windows FILETIME into a Date. The Windows FILETIME structure holds a date and time associated with a file. The structure identifies a 64-bit integer specifying the number of 100-nanosecond intervals which have passed since January 1, 1601. This 64-bit value is split into the two double words stored in the structure.

Parameters:
high - The higher double word of the FILETIME structure.
low - The lower double word of the FILETIME structure.
Returns:
The Windows FILETIME as a Date.

dateToFileTime

public static long dateToFileTime(java.util.Date date)

Converts a Date into a filetime.

Parameters:
date - The date to be converted
Returns:
The filetime
See Also:
filetimeToDate(int, int)