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
.
Table 19.3: Variant Types
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).