AGetInterface

 (Available in 01 TS COM - TS_COM_IUnknown)

Purpose

Get a interface from the enclosed COM object

Syntax

oAIUnknown:=oIUnknown:AGetInterface( TS_GUID_IUnknown( ) )

Arguments

upstruIID
_WinGUID

Description

This is the prefered method of getting an exported interface from the IUnknown object, using this method is prefered above the 'QueryInterface' method.

Returns

Instance of 'TS_AbstractIUnknown'

Example

ACCESS AIDispatch AS TS_AbstractIDispatch PASCAL CLASS TS_IUnknown
LOCAL oAIDispatch AS TS_AbstractIDispatch
   TSTrace Enter
   oAIDispatch:=SELF:AGetInterface( TS_GUID_IDispatch( ) )
   TSTrace Leave
RETURN oAIDispatch

Source

METHOD AGetInterface( upstruIID ) CLASS TS_IUnknown
LOCAL oCOMGlobalData AS _TS_COMGlobalData
LOCAL oAIUnknown AS TS_AbstractIUnknown
LOCAL pstruIID AS _WinGUID
LOCAL hResult AS LONG
   TSTrace Enter
   oCOMGlobalData:=_TS_ModuleGetCOMGlobalData( )
   #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
      EnterCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection )
   #ENDIF
   IF IsPtr( upstruIID )
      pstruIID:=TS_UsualValPTR( upstruIID )
      hResult:=SELF:QueryInterface( pstruIID, @oAIUnknown )
      DO CASE
      CASE hResult==E_NOINTERFACE
         IF TS_ShowNotSupportedInterfaces( )
            TS_DebOutSTRING( "Interface '"+TS_GUID2String( pStruIID )+"' not supported"  ; ...
           ... )
         END
         oAIUnknown:=NULL_OBJECT
      CASE TS_HFailed( hResult, TRUE )
         TSTrace Warning "SELF:QueryInterface(pstruIID,@oAIUnknown,lQueryForAIUnknown)"
         oAIUnknown:=NULL_OBJECT
      END
   ELSE
      TSTrace Warning "!IsPtr(upstruIID)"
      oAIUnknown:=NULL_OBJECT
   END
   #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
      LeaveCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection )
   #ENDIF
   TSTrace Leave
RETURN oAIUnknown