Value

 (Available in 01 TS COM - TS_COM_VariantArg)

Purpose

Set the variant usual value

Syntax

oVariantArg:Value:=uValue

Arguments

uValue
USUAL
dwConversionType
VT_... ( Normaly not given, See also: VO_Usual2Variant() )

Description

Set the variant usual value

Returns

USUAL

Example

METHOD GetSample( ) AS TS_IFPTemplate PASCAL CLASS SomeClass
LOCAL oIFPTemplate AS TS_IFPTemplate
LOCAL pVariantArg AS _WinVARIANTARG
LOCAL oATemplate AS TS_AbstractIDispatch
LOCAL oIFPSample AS TS_IFPSample
LOCAL oIFPFtrEx AS TS_IFPFtrEx
LOCAL oTemplate AS TS_VariantArg
LOCAL dwQuality AS DWORD
LOCAL oQuality AS TS_VariantArg
LOCAL oBlob AS TS_VariantArg
LOCAL aBlob AS ARRAY
   TSTrace Enter
// Read a file into an array of numerics
   aBlob:=ReadBlob( "C:\Smp_Template.FPT" )
// Create a 'TS_VariantArg'
   oBlob:=TS_VariantArg{ }
// Convert the 'aBlob' array to a safearray of 'VT_UI1(Byte)'
   oBlob:[ Value, _OR( VT_ARRAY, VT_UI1 ) ]:=aBlob
// Create a 'TS_IFPSample'
   oIFPSample:=TS_IFPSample{ }
// Import the safearray of 'VT_UI1(Byte)'
   oIFPSample:CMImport( oBlob )
// Prepare the first parameter for 'oIFPFtrEx:CMProcess()'
   oTemplate:=TS_VariantArg{ NIL, NIL, TS_USUAL2VARIANT_MAKE_NORMAL }
   pVariantArg:=oTemplate:VariantArg
   pVariantArg.vt:=_OR( VT_BYREF, VT_DISPATCH )
   pVariantArg.uVariant.byref:=@oATemplate
// Prepare the second parameter for 'oIFPFtrEx:CMProcess()'
   oQuality:=TS_VariantArg{ NIL, NIL, TS_USUAL2VARIANT_MAKE_NORMAL }
   pVariantArg:=oQuality:VariantArg
   pVariantArg.vt:=_OR( VT_BYREF, VT_I4 )
   pVariantArg.uVariant.byref:=@dwQuality
// Create a 'TS_IFPFtrEx'
   oIFPFtrEx:=TS_IFPFtrEx{ }
   oIFPFtrEx:CMProcess( oIFPSample, Tt_Verification, oTemplate, oQuality  ; ...
  ... )
// Create a 'TS_IFPTemplate' from 'oATemplate'
   oIFPTemplate:=TS_IFPTemplate{ NIL, oATemplate, NIL }
// Release 'oATemplate'
   oATemplate:Release( )
   oATemplate:=NULL_OBJECT
   TSTrace Leave
RETURN oIFPTemplate

Source

ASSIGN Value( uValue AS USUAL, dwConversionType:=0U AS DWORD ) AS USUAL PASCAL CLASS  ; ...
...TS_VariantArg
LOCAL pstruWinVariantArgTop AS _WinVARIANTARG
LOCAL siVariantType AS SHORT
LOCAL oVariantArg AS TS_VariantArg
LOCAL oNULL AS TS_NULL
   TSTrace Enter
// Make it compatible with older library versions
   IF HiWord( dwConversionType )==0 .AND. LoWord( dwConversionType )<>0 
      dwConversionType:=_OR( dwConversionType, TS_USUAL2VARIANT_MAKE_NORMAL, TS_USUAL2VARIANT_TYPE_HASVT  ; ...
     ... )
   END
   DO CASE
   CASE TS_IsByRef( USUAL( _CAST, uValue ) )
      TSTrace Warning "The 'uValue'-parameter is 'ByRef', this is not supported!"
      uValue:=NIL
   CASE SELF:_WinVariantArgTop<>NULL_PTR
      pstruWinVariantArgTop:=SELF:_WinVariantArgTop
      DO CASE
      CASE TS_IsInstanceOf( uValue, #TS_VariantArg )
         oVariantArg:=uValue
         IF LOGIC( _CAST, _AND( dwConversionType, TS_USUAL2VARIANT_TYPE_HASVT ) )
            siVariantType:=SHORT( _CAST, _AND( dwConversionType, TS_USUAL2VARIANT_VTMASK  ; ...
           ... ) )
            IF siVariantType<>oVariantArg:VT
               TSTrace Warning "LOGIC(_CAST,dwConversionType), Passing the 'dwType' " ; ...
              ... +"parameter is not supported when 'uValue' is '#TS_VariantArg'"
            END
         END
         oVariantArg:=uValue
         IF !oVariantArg:Copy( pstruWinVariantArgTop )
            TSTrace Warning "!oVariantArg:Copy(pstruWinVariantArgTop)"
            uValue:=NIL
         END
         oVariantArg:=NULL_OBJECT
      CASE TS_IsInstanceOf( uValue, #TS_NULL )
         oNULL:=uValue
         IF LOGIC( _CAST, _AND( dwConversionType, TS_USUAL2VARIANT_TYPE_HASVT ) )
            siVariantType:=SHORT( _CAST, _AND( dwConversionType, TS_USUAL2VARIANT_VTMASK  ; ...
           ... ) )
            IF siVariantType<>oNULL:VT
               TSTrace Warning "LOGIC(_CAST,dwConversionType), Passing the 'dwType' " ; ...
              ... +"parameter is not supported when 'uValue' is '#TS_NULL'"
            END
         END
         IF TS_HFailed( VariantClear( pstruWinVariantArgTop ), TRUE )
            TSTrace Warning "TS_HFailed(VariantClear(pstruWinVariantArgTop),TRUE)"
            uValue:=NIL
         ELSE
            oNULL:=uValue
            pstruWinVariantArgTop.vt:=oNULL:VT
            oNULL:=NULL_OBJECT
         END
      OTHERWISE
         IF LOGIC( _CAST, dwConversionType )
            IF !TS_Usual2Variant( uValue, pstruWinVariantArgTop, dwConversionType  ; ...
           ... )
               TSTrace Warning "!TS_Usual2Variant(uValue,pstruWinVariantArgTop,dwConversionType)"
               uValue:=NIL
            END
         ELSE
            IF !TS_Usual2Variant( uValue, pstruWinVariantArgTop )
               TSTrace Warning "!TS_Usual2Variant(uValue,pstruWinVariantArgTop)"
               uValue:=NIL
            END
         END
      END
      DO CASE
      CASE SELF:_TYPEOF==TS_USUAL2VARIANT_MAKE_VARIANT
         IF TS_HFailed( VariantClear( SELF:_WinVariantArgBot  ; ...
        ... ), TRUE )
            TSTrace Warning "TS_HFailed(VariantClear(SELF:_WinVariantArgBot),TRUE)"
            uValue:=NIL
         ELSE
            SELF:_WinVariantArgBot.vt:=_OR( SHORT(  ; ...
           ... _CAST, VT_BYREF ), VT_VARIANT )
            SELF:_WinVariantArgBot.uVariant.byref ; ...
           ... :=pstruWinVariantArgTop
         END
      CASE SELF:_TYPEOF==TS_USUAL2VARIANT_MAKE_BYREF
         TSTrace ToDo NB "Needs testing"
         IF TS_HFailed( VariantClear( SELF:_WinVariantArgBot  ; ...
        ... ), TRUE )
            TSTrace Warning "TS_HFailed(VariantClear(SELF:_WinVariantArgBot),TRUE)"
            uValue:=NIL
         ELSE
            SELF:_WinVariantArgBot.vt:=_OR( SHORT(  ; ...
           ... _CAST, VT_BYREF ), pstruWinVariantArgTop.vt )
            SELF:_WinVariantArgBot.uVariant.byref ; ...
           ... :=@pstruWinVariantArgTop.uVariant
         END
      OTHERWISE
         TSTrace Warning "SELF:_Type<>TS_USUAL2VARIANT_MAKE_VARIANT .AND. SELF:_Type<>TS_USUAL2VARIANT_MAKE_BYREF"
         uValue:=NIL
      END
   CASE SELF:_WinVariantArgBot<>NULL_PTR
      IF LOGIC( _CAST, dwConversionType )
         IF !TS_Usual2Variant( uValue, SELF:_WinVariantArgBot ; ...
        ... , dwConversionType )
            TSTrace Warning "!TS_Usual2Variant(uValue,SELF:_WinVariantArgBot,dwConversionType)"
            uValue:=NIL
         END
      ELSE
         IF !TS_Usual2Variant( uValue, SELF:_WinVariantArgBot  ; ...
        ... )
            TSTrace Warning "!TS_Usual2Variant(uValue,SELF:_WinVariantArgBot)"
            uValue:=NIL
         END
      END
   OTHERWISE
      TSTrace Warning "SELF:_WinVariantArgTop==NULL_PTR .AND. SELF:_WinVariantArgBot==NULL_PTR"
      uValue:=NIL
   END
   TSTrace Leave
RETURN uValue