12.04.2014 Views

6 folii na stronę

6 folii na stronę

6 folii na stronę

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Interfejs IDispatch,<br />

dispinterfejsy<br />

i automatyzacja<br />

Jarosław Francik<br />

Interface Idispatch : IUnknown<br />

{<br />

HRESULT GetTypeInfoCount([out] UINT __RPC_FAR *pctinfo);<br />

HRESULT GetTypeInfo(<br />

[in] UINT iTInfo, [in] LCID lcid,<br />

[out] ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);<br />

HRESULT GetIDsOfNames(<br />

[in] REFIID riid,<br />

[in] LPOLESTR __RPC_FAR *rgszNames,<br />

[in] UINT cNames,<br />

[in] LCID lcid,<br />

[out, size_is(cNames)] DISPID __RPC_FAR *rgDispId);<br />

HRESULT Invoke(<br />

[in] DISPID dispIdMember,<br />

[in] REFIID riid, [in] LCID lcid, [in] WORD wFlags,<br />

[in] DISPPARAMS __RPC_FAR *pDispParams,<br />

[out] VARIANT __RPC_FAR *pVarResult,<br />

[out] EXCEPINFO __RPC_FAR *pExcepInfo,<br />

[out] UINT __RPC_FAR *puArgErr);<br />

};<br />

interfejs IDispatch (IDL)<br />

Dispinterface<br />

Dispinterface<br />

Klient<br />

IDispatch<br />

QueryInterface<br />

Składnik COM<br />

Klient<br />

IDispatch<br />

QueryInterface<br />

Składnik COM<br />

AddRef<br />

Release<br />

GetTypeInfoCount<br />

dispinterface<br />

"fun1" 1<br />

"fun2" 2<br />

AddRef<br />

Release<br />

GetTypeInfoCount<br />

dispinterface<br />

"fun1" 1<br />

"fun2" 2<br />

GetTypeInfo<br />

GetIDsOfNames<br />

Invoke<br />

"fun3" 3<br />

1 fun1<br />

2 fun2<br />

GetTypeInfo<br />

GetIDsOfNames<br />

Invoke<br />

"fun3" 3<br />

pVTbl fun1<br />

fun2<br />

3 fun3<br />

fun3<br />

dual interface<br />

IDispatch<br />

Klient<br />

QueryInterface<br />

AddRef<br />

Release<br />

GetTypeInfoCount<br />

GetTypeInfo<br />

GetIDsOfNames<br />

Invoke<br />

fun1<br />

fun2<br />

fun3<br />

Składnik COM<br />

dispinterface<br />

"fun1" 1<br />

"fun2" 2<br />

"fun3" 3<br />

Parametry wywołania Invoke<br />

dispIdMember – dispid wywoływanej funkcji<br />

riid – zarezerwowany, ma być IID_NULL<br />

lcid – użyj GetUserDefaultLCID()<br />

wFlags – rodzaj funkcji:<br />

DISPATCH_METHOD, DISPATCH_PROPERTYGET,<br />

DISPATCH_PROPERTYPUT, DISPATCH_PROPERTYPUTREF<br />

pDispParams – tablica parametrów wywołania<br />

tagDISPPARAMS<br />

pVarResult – wynik funkcji (wskaźnik <strong>na</strong><br />

wariant)<br />

pExcepInfo, puArgErr – sytuacje wyjątkowe<br />

1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!