IIDAdd

 (Available in 01 TS COM - TS_COM_IUnknown)

Purpose

Add a GUID to the list of supported interfaces

Syntax

oSomeIObject:IIDAdd( TS_GUID_IDispatch( ) )

Arguments

upstruIID
_WinGUID
upstruSavedIID
_WinGUID PTR

Description

When the object is queried for an interfece ( Using 'QueryInterface()' ) the object checks the list of supported interfaces, if one of the supported interface matches the requested interface, then the 'QueryInterface()' method will return 'SELF'.

Returns

lRetVal = LOGIC ( TRUE is succeeded )

Example

METHOD...( )CLASS...
LOCAL pstruWinGUID AS _WinGUID
IF !oSomeIObject:IIDAdd( TS_GUID_IDispatch( ), @pstruWinGUID )
   TSTrace Warning "!oSomeIObject:IIDAdd(TS_GUID_IDispatch())"
ELSE
   ? TS_GUID2String( pstruWinGUID )
END

Source

METHOD IIDAdd( upstruIID ) CLASS TS_IUnknown
LOCAL oCOMGlobalData AS _TS_COMGlobalData
LOCAL pstruIID AS _WinGUID
LOCAL lRetVal AS LOGIC
LOCAL oIIDs AS TS_PointerSafe
   TSTrace Enter
   oCOMGlobalData:=_TS_ModuleGetCOMGlobalData( )
   #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
      EnterCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection )
   #ENDIF
   pstruIID:=TS_UsualValPTR( upstruIID )
   DO CASE
   CASE pstruIID==NULL_PTR
      TSTrace Warning "pstruIID==NULL_PTR"
      lRetVal:=FALSE
   CASE TS_IsEqualGUID( pstruIID, TS_GUID_IUnknown( ) )
      TSTrace Warning "TS_IsEqualGUID(pstruIID,TS_GUID_IUnknown())"
      lRetVal:=FALSE
   OTHERWISE
      IF SELF:_IIDs==NULL_OBJECT
         SELF:_IIDs:=TS_PointerSafe{ NIL, 10, _SIZEOF( _WinGUID  ; ...
        ... ) }
      END
      oIIDs:=SELF:_IIDs
      IF oIIDs:ItemLocate( pstruIID )
         lRetVal:=FALSE
      ELSE
         lRetVal:=oIIDs:ItemAdd( pstruIID, TRUE )
      END
      oIIDs:=NULL_OBJECT
   END
   #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
      LeaveCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection )
   #ENDIF
   TSTrace Leave
RETURN lRetVal