OLE Automation variable types and other types defined by QM

In addition to the intrinsic variable types, QM also defines and supports 7 OLE-Automation-compatible types: FLOAT, CURRENCY, DECIMAL, VARIANT, BSTR, DATE and ARRAY. OLE types are mostly used as arguments and return values of OLE Automation functions. Actually they are user-defined types (structures) but in most situations are interpreted much like intrinsic types. For example, QM automatically converts between intrinsic types and OLE types when necessary. However, only few QM intrinsic functions support OLE types (other functions convert them to intrinsic types). In expressions with operators, OLE types are converted to double. For greater precision, use member functions.

 

The table shows basic parameters of OLE types and how they are related to VB6 and C++ types.

Type FLOAT CURRENCY DECIMAL VARIANT BSTR DATE ARRAY
Numeric Yes Yes Yes *   Yes  
String       * Yes    
Floating-point Yes Yes Yes *   Yes  
Signed Yes Yes Yes *   Yes  
Size (bytes) 4 8 16 (2 unused) 16** 4** 8 4**
Precision < double ~ double > double *      
VB6 Single Currency Decimal Variant String Date arrays
C++ float CY, __int64/10000 DECIMAL VARIANT BSTR DATE, double SAFEARRAY*

* A variable of VARIANT type can contain value of various types.

** A variable of BSTR type is pointer (4 bytes) to length-prefixed Unicode UTF-16 (double-byte) string, so whole size is 4 + 4 + (num. characters * 2) + 2 bytes. A variable of type VARIANT also can contain BSTR or pointer to data of other type. A variable of type ARRAY is pointer (4 bytes) to array descriptor, which has pointer to array data. Size of array descriptor depends on array type and number of dimensions.

 

QM also defines several other types and interfaces: QMITEM, FILTER, QMERROR, POINT, RECT, SYSTEMTIME, FILETIME, FIND_DATA, WIN32_FIND_DATA, FINDRX, REPLACERX, CALLOUT, FINDWORDN, MES, UDTRIGGER, IUnknown, IDispatch IAccessible, Acc, IStringMap and several other.