IID

 (Available in 01 TS COM - TS_COM_IUnknown)

Purpose

Get the IID of the enclosed interface.

Syntax

? TS_GUID2String( oDelegateIUnknown:IID )

Description

Get the ( main ) IID of the enclosed interface. The IID ( Interface ID ) is used by COM to identify interfaces. The returned IID can be seen as the classname of the interface. See also IIDAdd and IIDDel.

Returns

POINTER, IID as WinGUID

Example

IF TS_IsEqualGUID( oDelegateIUnknown:IID, TS_GUID_IDispatch( ) )
// Use the 'IDispatch' interface of the interface
ELSE
   TSTrace Warning "This interface dous not support 'IDispatch'"
END

Source

ASSIGN IID( upstruIID ) CLASS TS_IUnknown
LOCAL oCOMGlobalData AS _TS_COMGlobalData
LOCAL pstruWinGUID AS _WinGUID
LOCAL oAITypeInfo AS TS_AbstractITypeInfo
LOCAL oAITypeLib AS TS_AbstractITypeLib
LOCAL pstruIID AS _WinGUID
LOCAL hResult AS LONG
   TSTrace Enter
   oCOMGlobalData:=_TS_ModuleGetCOMGlobalData( )
   #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
      EnterCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection )
   #ENDIF
   pstruIID:=TS_UsualValPTR( upstruIID )
   DO CASE
   CASE SELF:_IID==NULL_PTR
      DO CASE
      CASE pstruIID==NULL_PTR
         TSTrace Warning "pstruIID==NULL_PTR"
         pstruWinGUID:=NULL_PTR
      CASE IsBadReadPtr( pstruIID, _SIZEOF( _WinGUID ) )
         TSTrace Warning "IsBadReadPtr(pstruIID,_SizeOf(_WinGUID))"
         pstruWinGUID:=NULL_PTR
      OTHERWISE
         SELF:_IID:=TS_MemAlloc( _SIZEOF( _WinGUID ), TRUE )
         IF SELF:_IID==NULL_PTR
            TSTrace Fatal "(SELF:_IID:=TS_MemAlloc(_SizeOf(_WinGUID),TRUE))==NULL_PTR"
            pstruWinGUID:=NULL_PTR
         ELSE
            MemCopy( SELF:_IID, pstruIID, _SIZEOF( _WinGUID )  ; ...
           ... )
            SELF:IIDAdd( SELF:_IID )
            oAITypeLib:=SELF:AITypeLib
            IF oAITypeLib<>NULL_OBJECT
               #IFDEF TS_TRACETIMED_ENABLE
                  _TS_TraceTimedEnter( TS_TT_SYM_EXTERNAL, TS_TT_SYM_ITYPELIB, #GetTypeInfoOfGUID  ; ...
                 ... )
               #ENDIF
               hResult:=oAITypeLib:GetTypeInfoOfGUID( SELF:_IID ; ...
              ... , @oAITypeInfo )
               #IFDEF TS_TRACETIMED_ENABLE
                  _TS_TraceTimedLeave( TS_TT_SYM_EXTERNAL, TS_TT_SYM_ITYPELIB, #GetTypeInfoOfGUID  ; ...
                 ... )
               #ENDIF
               IF TS_HSucceeded( hResult, FALSE )
                  DO CASE
                  CASE oAITypeInfo==NULL_OBJECT
                     TSTrace Warning "No type info found for '"+TS_GUID2String( SELF:_IID  ; ...
                    ... )+"'" hResult
                     IF TS_ShowNotFoundTypeInfos( )
                        TSTrace Shw "No type info found for '"+TS_GUID2String( SELF:_IID  ; ...
                       ... )+"'" hResult
                     END
                     hResult:=CLASS_E_CLASSNOTAVAILABLE
                  CASE oAITypeInfo<>NULL_OBJECT
                     SELF:_AITypeInfo:=oAITypeInfo
                  OTHERWISE
                     TSTrace Warning "!_____TS_ConvertAndRegisterAIU(@oAITypeInfo" ; ...
                    ... +",@oConvertedAITypeInfo,FALSE,NULL_SYMBOL)"
                     hResult:=CLASS_E_CLASSNOTAVAILABLE
                     #IFDEF TS_TRACETIMED_ENABLE
                        _TS_TraceTimedEnter( TS_TT_SYM_EXTERNAL, TS_TT_SYM_ITYPEINFO ; ...
                       ... , #Release )
                     #ENDIF
                     oAITypeInfo:Release( )
                     #IFDEF TS_TRACETIMED_ENABLE
                        _TS_TraceTimedLeave( TS_TT_SYM_EXTERNAL, TS_TT_SYM_ITYPEINFO ; ...
                       ... , #Release )
                     #ENDIF
                  END
                  oAITypeInfo:=NULL_OBJECT
               ELSE
                  TSTrace Warning "No type info found for '"+TS_GUID2String( SELF:_IID  ; ...
                 ... )+"'" hResult
                  IF TS_ShowNotFoundTypeInfos( )
                     TSTrace Shw "No type info found for '"+TS_GUID2String( SELF:_IID  ; ...
                    ... )+"'" hResult
                  END
                  hResult:=CLASS_E_CLASSNOTAVAILABLE
               END
               #IFDEF TS_TRACETIMED_ENABLE
                  _TS_TraceTimedEnter( TS_TT_SYM_EXTERNAL, TS_TT_SYM_ITYPELIB, #Release  ; ...
                 ... )
               #ENDIF
               oAITypeLib:Release( )
               #IFDEF TS_TRACETIMED_ENABLE
                  _TS_TraceTimedLeave( TS_TT_SYM_EXTERNAL, TS_TT_SYM_ITYPELIB, #Release  ; ...
                 ... )
               #ENDIF
               oAITypeLib:=NULL_OBJECT
            ELSE
               TSTrace Warning "oAITypeLib==NULL_OBJECT"
            END
            pstruWinGUID:=SELF:_IID
         END
      END
   CASE TS_IsEqualGUID( SELF:_IID, pstruIID )
      pstruWinGUID:=SELF:_IID
   OTHERWISE
      TSTrace Warning "SELF:_IID<>NULL_PTR .AND. !TS_IsEqualGUID(SELF:_IID,"+TS_GUID2String ; ...
     ... ( pstruIID )+")"
      pstruWinGUID:=NULL_PTR
   END
   #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
      LeaveCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection )
   #ENDIF
   TSTrace Leave
RETURN pstruWinGUID