IDispatch - IDispatch

IDispatch ... arayüz ortaya çıkaran OLE Otomasyonu protokol.[1] Uzatma IBilinmeyen tarafından açığa çıkarılan standart arayüzlerden biridir. COM nesneler. COM, üç arayüz türü arasında ayrım yapar: özel VTABLE tabanlı IUnknown arayüzler olan sevk etmek iç gözlemi destekleyen IDispatch arabirimleri olan ve çift her iki türü de destekleyen arayüzler.

Otomasyon (IDispatch) arabirimi, bir istemci uygulamasının çalışma zamanında bir nesne tarafından hangi özelliklerin ve yöntemlerin desteklendiğini bulmasını sağlar, yani RTTI. Ayrıca bu özellikleri ve yöntemleri çağırmak için gerekli bilgileri sağlar. İstemci uygulamalarının, derlendiklerinde nesne üyelerinden haberdar olmaları gerekmez. Bu, COM ve ActiveX nesnelerinin aşağıdaki gibi komut dosyası program platformları tarafından çağrılmasına olanak sağlar. ASP sunucu ve JavaScript açık Internet Explorer o sırada arama gelenekleri bilinmiyordu IIS veya IE inşa edildi. Buna karşılık, basit bir nesne kitaplığı derlenir ve bir programa bağlanır, örn. Bir DLL çağrısının derleme sırasında bir işlev adı ve parametreleri bilmesi gerekir.

Bir komut dosyası yazıcısı, COM nesnesine belgelerden zaten bildiği bir yöntem veya özellik isteyebilir. Daha sonra istemci, IDispatch arabirimi tarafından sağlanan Invoke ile işlevi çalıştırabilir. geç bağlama. Bu tür bir yetenek ayrıca Dinamik Veri Değişimi (DDE), çok düşük seviyeli olduğu için hiçbir zaman popüler olmadı.

Sevk etmek arayüzler esnektir, ancak bunlara kıyasla ek iç gözlem ve çağrı ek yükünden muzdariptir. özel arayüzler.[2] Bu nedenle, her iki arayüz türünü de desteklemek genellikle iyi bir fikirdir. çift arayüzler. Bu şekilde, VTABLE tabanlı çağrıyı destekleyen istemciler, özel yerine arayüz sevk etmek karşılık.

Yöntemler

IDispatch arabirimini destekleyen bir nesne tarafından uygulanan her özellik ve yöntem, genellikle DISPID olarak kısaltılan bir Gönderim Kimliği'ne sahiptir. DISPID, bir özelliği veya yöntemi tanımlamanın birincil yoludur ve Çağırmak bir özellik veya yöntem için işlev, bir dizi ile birlikte çağrılacak Varyantlar parametreleri içeren. GetIDsOfNames işlev, içindeki bir özellik veya yöntem adından uygun DISPID'yi almak için kullanılabilir. dizi biçim.

IDispatch, IBilinmeyen ve bunu dört ek yöntemle genişletir:

arayüz IDispatch : halka açık IBilinmeyen {  gerçek HRESULT GetTypeInfoCount(imzasız int * pctinfo) = 0;  gerçek HRESULT GetTypeInfo(imzasız int iTInfo,                              LCID lcid,                              ITypeInfo ** ppTInfo                             ) = 0;  gerçek HRESULT GetIDsOfNames(REFIID riid,                                OLECHAR ** rgszNames,                                imzasız int cNames,                                LCID lcid,                                DISPID * rgDispId                               ) = 0;  gerçek HRESULT Çağırmak(DISPID dispIdMember,                         REFIID riid,                         LCID lcid,                         WORD wFlags,                         DISPPARAMLAR * pDispParams,                         DEĞİŞKEN * pVarResult,                         EXCEPINFO * pExcepInfo,                         imzasız int * puArgErr                        ) = 0;};

IDispatch arayüz kimliği olarak tanımlanır GUID {00020400-0000-0000-C000-000000000046} değeriyle.

Referanslar

Dış bağlantılar