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
- DispHelper , biblioteka typu open source ułatwiająca korzystanie z IDispatch z języka C lub C++.
- IDispatchCodeGenerator , Generator kodu. Funkcja, która dodaje IDispatch do obiektu. Językiem jest C++.