IDispatch - IDispatch

IDispatch , OLE Otomasyonu protokolünü ortaya çıkaran arabirimdir . IUnknown'ı genişleterek , COM nesneleri tarafından gösterilebilen standart arabirimlerden biridir . COM, üç arabirim türü arasında ayrım yapar: VTABLE tabanlı IUnknown arabirimleri olan özel , iç gözlemi destekleyen IDispatch arabirimleri olan gönderme ve her iki türü de destekleyen ikili arabirimler.

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 kavramını uygular . Ayrıca, bu özellikleri ve yöntemleri çağırmak için gerekli bilgileri sağlar. İstemci uygulamalarının derlendiklerinde nesne üyelerinin farkında olmaları gerekmez. Bu COM verir ve ActiveX gibi programlama programları platformları tarafından çağrılacak nesneleri ASP sunucu ve JavaScript üzerinde Internet Explorer arama kuralları anda bilinen değildi, IIS veya IE inşa edildi. Buna karşılık, basit bir nesne kitaplığı derlenir ve bir programa bağlanır, örneğin bir DLL çağrısının derleme zamanında bir işlev adı ve parametreleri bilmesi gerekir.

Bir komut dosyası yazarı, COM nesnesinden, belgelerden zaten bildiği bir yöntem veya özellik isteyebilir. Ardından, istemci, bir geç bağlama biçimi olan IDispatch arabirimi tarafından sağlanan Invoke ile işlevi yürütebilir . Bu tür bir yetenek, çok düşük seviyeli olduğu için hiçbir zaman popüler olmayan Dinamik Veri Değişimi (DDE) tarafından da desteklendi .

Gönderim arabirimleri esnektir, ancak özel arabirimlere kıyasla ek iç gözlem ve çağırma ek yükünden muzdariptir . Bu nedenle, her iki arabirim türünü de ikili arabirimlerle desteklemek genellikle iyi bir fikirdir . Bu şekilde, VTABLE tabanlı çağrıyı destekleyen istemciler , gönderme karşılığı yerine özel arabirimi kullanabilir .

yöntemler

IDispatch arabirimini destekleyen bir nesne tarafından uygulanan her özellik ve yöntem, genellikle DISPID olarak kısaltılan Sevk Kimliği adı verilen şeye sahiptir. DISPID, bir özelliği veya yöntemi tanımlamanın birincil yoludur ve parametreleri içeren bir Varyant dizisiyle birlikte çağrılacak bir özellik veya yöntem için Invoke işlevine sağlanmalıdır . GetIDsOfNames fonksiyonu olan bir özellik veya yöntem adından uygun DISPID almak için kullanılabilir dize biçimi.

IDispatch, IUnknown'dan türetilir ve onu dört ek yöntemle genişletir:

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

Idispatch arabirim kimliği bir şekilde tanımlanır guıd {00020400-0000-0000-C000-000000000046} değeri ile.

Referanslar

Dış bağlantılar