IWysyłka

IDispatch to interfejs , który udostępnia protokół automatyzacji OLE . Rozszerzając IUnknown , jest to jeden ze standardowych interfejsów, które mogą być udostępniane przez obiekty COM . COM rozróżnia trzy typy interfejsów: custom , który jest interfejsem IUnknown opartym na VTABLE, wysyłką , który jest interfejsem IDispatch obsługującym introspekcję, oraz podwójnym interfejsem obsługującym oba typy.

Interfejs Automation (IDispatch) pozwala aplikacji klienckiej dowiedzieć się, jakie właściwości i metody są obsługiwane przez obiekt w czasie wykonywania, tj. implementuje koncepcję RTTI . Zawiera również informacje niezbędne do wywołania tych właściwości i metod. Aplikacje klienckie nie muszą znać elementów członkowskich obiektu podczas ich kompilacji. Pozwala to na wywoływanie obiektów COM i ActiveX przez platformy programów skryptowych, takie jak ASP i JavaScript w Internet Explorerze , gdzie konwencje wywoływania nie były wówczas znane IIS lub IE zostały zbudowane. Natomiast prosta biblioteka obiektów jest kompilowana i dołączana do programu, np. wywołanie DLL musi znać nazwę funkcji i parametry w czasie kompilacji.

Autor skryptu może poprosić obiekt COM o metodę lub właściwość, o której już wie z dokumentacji. Następnie klient może wykonać funkcję z Invoke dostarczoną przez interfejs IDispatch, formę późnego wiązania . Ten rodzaj możliwości był również wspierany przez Dynamic Data Exchange (DDE), który nigdy nie stał się popularny ze względu na zbyt niski poziom.

wysyłania są elastyczne, ale w porównaniu z interfejsami niestandardowymi wiążą się z dodatkowymi kosztami związanymi z introspekcją i wywoływaniem . Dlatego często dobrym pomysłem jest obsługa obu typów interfejsów za pomocą podwójnych interfejsów. W ten sposób klienci obsługujący wywołania oparte na VTABLE mogą używać niestandardowego interfejsu zamiast odpowiednika wysyłania .

Metody

Każda właściwość i metoda zaimplementowana przez obiekt obsługujący interfejs IDispatch ma tak zwany Identyfikator wysyłki, który często jest określany skrótem DISPID. Identyfikator DISPID jest podstawowym sposobem identyfikowania właściwości lub metody i musi zostać dostarczony do Invoke , aby można było wywołać właściwość lub metodę, wraz z tablicą wariantów zawierających parametry. Funkcja GetIDsOfNames może służyć do uzyskiwania odpowiedniego identyfikatora DISPID z nazwy właściwości lub metody w formacie ciągu .

IDispatch wywodzi się z IUnknown i rozszerza go o cztery dodatkowe metody:

     
         0
      
                               
                                
                               0
      interfejs  IDispatch  :  public  IUnknown  {  virtual  HRESULT  GetTypeInfoCount  (  unsigned  int  *  pctinfo  )  =  ;  wirtualny  HRESULT  GetTypeInfo  (  unsigned  int  iTInfo  ,  LCID  lcid  ,  ITypeInfo  **  ppTInfo  )  =  ;  wirtualny  HRESULT  GetIDsOfNames  (  REFIID  riid  , 
                                  
                                  
                                 
                                  
                                 0
     
                          
                          
                          
                           
                           
                          OLECHAR  **  rgszNames  ,  unsigned  int  cNames  ,  LCID  lcid  ,  DISPID  *  rgDispId  )  =  ;  wirtualne  wywołanie  HRESULT  (  DISPID  dispIdMember  ,  REFIID  riid  ,  LCID  lcid  ,  WORD  wFlags  ,  DISPPARAMS  *  pDispParams  ,  VARIANT  *  pVarResult  ,  EXCEPINFO   
                            
                          0
 *  pExcepInfo  ,  unsigned  int  *  puArgErr  )  =  ;  }; 

Identyfikator interfejsu IDispatch jest zdefiniowany jako identyfikator GUID o wartości {00020400-0000-0000-C000-000000000046}.

Linki zewnętrzne