System.Variants.TInvokeableVariantType

From Appmethod Libraries
Jump to: navigation, search

System.Variants.TCustomVariantTypeSystem.TObjectTInvokeableVariantType

Object Pascal

TInvokeableVariantType = class(TCustomVariantType, IVarInvokeable)

C++

class PASCALIMPLEMENTATION TInvokeableVariantType : public TCustomVariantType

Properties

Type Visibility Source Unit Parent
class public
System.Variants.pas
System.Variants.hpp
System.Variants System.Variants

Description

TInvokeableVariantType is the base class for custom Variant types that implement custom Variants with properties and methods.

Use TInvokeableVariantType to define new data types for Object Pascal Variants with properties and methods. TInvokeableVariantType descendants do not represent the Variants themselves. Rather, they act as utility classes that the custom Variants call on to perform their operations.

Note: Do not define TInvokeableVariantType descendants in C++. The logic for custom Variant types must be defined in Object Pascal code.

To create a Variant type that supports properties and methods:

  1. Map the storage of the Variant's data on to the TVarData record.
  2. Write a method that creates instances of your custom Variant. This fills in the Variant's data as defined in step 1.
  3. Declare a class that descends from TInvokeableVariantType.
  4. Implement all required behavior (including type conversion rules) in the new class. This involves overriding the appropriate virtual methods (typically DoFunction, DoProcedure, GetProperty, SetProperty, BinaryOp, UnaryOp, CompareOp or Compare, Cast, CastTo, Clear, Copy, IsClear, LeftPromotion, and RightPromotion).
  5. In the initialization section of the unit that defines your TInvokeableVariantType descendant, create an instance of your class. When you instantiate your object, it automatically registers itself with the Variant-handling system so that the new Variant type is enabled.
  6. In the finalization section of the unit that defines your TInvokeableVariantType descendant, free the instance of your class. This automatically unregisters the Variant type.

For an example, see the VarConv unit, which implements a custom Variant type for measurements.

Tip: If the custom Variant type uses an object instance to store its data, you can automatically implement the published properties of that object by deriving your custom Variant type from TPublishableVariantType instead.

See Also