In order for automation controllers and servers to cooperate, they have to have some way to agree on the type of data that they're passing. Automation accomplishes this through a data type called a VARIANT
. The VARIANT
data type is built on a C-language union. It contains a type field that identifies that type of data in the union (things such as strings, numbers, automation objects, etc.) and a field that contains the data.
Usually, Perl handles data-type conversion for you. If you need more control, though, you can create a Variant
object and specify the type yourself. Perl provides access to the types listed in Table 19.3.
Variant Type | Description |
---|---|
VT_UI1 | Unsigned character (1 byte) |
VT_I2 | Signed integer (2 bytes) |
VT_I4 | Signed integer (4 bytes) |
VT_R4 | Floating point (4 bytes) |
VT_R8 | Floating point (8 bytes) |
VT_DATE | OLE Date (floating-point value measuring days since midnight, Dec. 30, 1899) |
VT_BSTR | OLE String |
VT_CY | OLE Currency |
VT_BOOL | OLE Boolean |
By default, Perl converts integer data to the VT_I4 type, string data to the VT_BSTR type, and floating-point data to the VT_R8 type. Usually, these conversions are what you'd expect, but let's look at how you might specify your own type:
$vt = new OLE::Variant(OLE::VT_DATE, "May 31, 1997" ); $Message->{TimeSent} = $vt;
This example first creates a Variant object, setting the type to VT_DATE
and the date to "May 31, 1997." It then assigns the date to the Message
object TimeSent property (something you might do if you were posting a message to a folder, for example).