Convert2ByRef

 (Available in 01 TS COM - TS_COM_VariantArg)

Source

METHOD Convert2ByRef( ) AS LOGIC PASCAL CLASS TS_VariantArg
LOCAL pstruWinVariantArgBot AS _WinVARIANTARG
LOCAL pstruWinVariantArgTop AS _WinVARIANTARG
LOCAL lRetVal AS LOGIC
   TSTrace Enter
   DO CASE
   CASE SELF:_TYPEOF==TS_USUAL2VARIANT_MAKE_BYREF
      lRetVal:=TRUE
   CASE SELF:_TYPEOF<>TS_USUAL2VARIANT_MAKE_NORMAL
      IF SELF:Convert2Normal( )
         IF SELF:Convert2ByRef( )
            lRetVal:=TRUE
         ELSE
            TSTrace Warning "!SELF:Convert2ByRef()"
            lRetVal:=FALSE
         END
      ELSE
         TSTrace Warning "!SELF:Convert2Normal()"
         lRetVal:=FALSE
      END
   CASE SELF:_WinVariantArgBot==NULL_PTR
      TSTrace Warning "SELF:_WinVariantArgBot==NULL_PTR"
      lRetVal:=FALSE
   CASE SELF:_WinVariantArgTop<>NULL_PTR .OR. SELF:_TYPEOF ; ...
  ... <>TS_USUAL2VARIANT_MAKE_NORMAL
      TSTrace Warning "SELF:_WinVariantArgTop<>NULL_PTR .OR. SELF:_Type<>TS_USUAL2VARIANT_MAKE_NORMAL"
      lRetVal:=FALSE
   OTHERWISE
      pstruWinVariantArgTop:=SELF:_WinVariantArgBot
      pstruWinVariantArgBot:=MemAlloc( _SIZEOF( _WinVARIANTARG ) )
      IF pstruWinVariantArgBot==NULL_PTR
         TSTrace Fatal "pstruWinVariantArgBot:=MemAlloc(_SizeOf(_WinVARIANTARG))==NULL_PTR"
         lRetVal:=FALSE
      ELSE
         VariantInit( pstruWinVariantArgBot )
         pstruWinVariantArgBot.vt:=_OR( SHORT( _CAST, VT_BYREF ), pstruWinVariantArgTop.vt  ; ...
        ... )
         pstruWinVariantArgBot.uVariant.byref:=@pstruWinVariantArgTop.uVariant
         SELF:_WinVariantArgBot:=pstruWinVariantArgBot
         SELF:_WinVariantArgTop:=pstruWinVariantArgTop
         SELF:_TYPEOF:=TS_USUAL2VARIANT_MAKE_BYREF
         lRetVal:=TRUE
      END
   END
   TSTrace Leave
RETURN lRetVal