Dispecerizarea interfețelor și automatizării, un blog despre criptare

Automatizarea este un alt mod de a gestiona o componentă. Automatizare - add-in peste COM.

Serverul de automatizare este o componentă COM care implementează interfața IDispatch.







Controlerul de automatizare este un client COM care comunică cu serverul prin interfața IDispatch. (Pentru apelurile de funcții serverul folosește funcțiile membrilor interfeței - un apel implicit).

Inițial, Automation a fost dezvoltat pentru Visual Basic.

Aproape orice serviciu reprezentat prin interfețe COM poate fi reprezentat prin IDispatch.

Interfața IDispatch

IDispatch oferă acces la toate serviciile printr-o singură interfață.

IDispatch oferă un apel pentru funcții în trei parametri: ProgID al componentei, numele funcției și argumentele acesteia.

Interfața IDispatch are următoarea descriere oficială:

interfaceIDispatch. IUnknown // din fișierul OAidl.idl

HRESULT GetTypeInfoCount ([afară] UINT * pctinfo);







HRESULT GetTypeInfo ([in] UINT iTInfo,
[in] LCID lsid ;;
[afară] ITypeInfo ** ppTInfo);

HRESULT GetIDsOfName ([in] REFIID riid, // Acceptă numele funcției și

// returnează
[in, size_is (cNames)] LPOLESTR * rgszNames, // Expediere

// identificator
[in] UINT cNames,
[in] LCID,
[out, size_is (cNames)] DISPID * rgDispId); // DISPID este lung

// LONG și nu unic

// Fiecare implementare IDispatch are propriul IID (uneori numit DIID).

HRESULT invoca ([in] DISPIDMember, // Controller de automatizare
[in] REFIID riid, // trece DISPID-ul apelului

// funcționează în Invoke

[in, out] DISPARABILE * pDispParams,

[out] VARIANT * pVarResult,

[ex] EXEPINFO * pExcepinfo,

[afară] UINT * puArgErr

DISPID este utilizat de funcția membru Invoke ca un indice în matricea de indicatori de funcție. Cu toate acestea, serverul de automatizare nu trebuie să implementeze Invoke în acest fel. Se poate folosi instrucțiunea comutatorului obișnuit.

IDispatch :: Invoke implementează un set de funcții accesate de index.

Un set de funcții implementate folosind IDispatch :: Invoke se numește interfața de expediere (disp-interface)

Implementarea IDispatch :: Invoke definește un set de funcții prin care comunică serverul și controlerul de automatizare.

Un exemplu de posibila implementare a interfetei DISP este:







Articole similare

Trimiteți-le prietenilor: