jscript: COM cleanup for the IDispatchEx iface.

This commit is contained in:
Michael Stefaniuc 2011-01-16 21:27:20 +01:00 committed by Alexandre Julliard
parent c28d6f38af
commit 3cb9886ea7
2 changed files with 29 additions and 30 deletions

View File

@ -420,21 +420,24 @@ static HRESULT fill_protrefs(jsdisp_t *This)
return S_OK; return S_OK;
} }
#define DISPATCHEX_THIS(iface) DEFINE_THIS(jsdisp_t, IDispatchEx, iface) static inline jsdisp_t *impl_from_IDispatchEx(IDispatchEx *iface)
{
return CONTAINING_RECORD(iface, jsdisp_t, IDispatchEx_iface);
}
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv) static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
if(IsEqualGUID(&IID_IUnknown, riid)) { if(IsEqualGUID(&IID_IUnknown, riid)) {
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
*ppv = _IDispatchEx_(This); *ppv = &This->IDispatchEx_iface;
}else if(IsEqualGUID(&IID_IDispatch, riid)) { }else if(IsEqualGUID(&IID_IDispatch, riid)) {
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
*ppv = _IDispatchEx_(This); *ppv = &This->IDispatchEx_iface;
}else if(IsEqualGUID(&IID_IDispatchEx, riid)) { }else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv); TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
*ppv = _IDispatchEx_(This); *ppv = &This->IDispatchEx_iface;
}else if(IsEqualGUID(&IID_IDispatchJS, riid)) { }else if(IsEqualGUID(&IID_IDispatchJS, riid)) {
TRACE("(%p)->(IID_IDispatchJS %p)\n", This, ppv); TRACE("(%p)->(IID_IDispatchJS %p)\n", This, ppv);
jsdisp_addref(This); jsdisp_addref(This);
@ -452,7 +455,7 @@ static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid,
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface) static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
LONG ref = InterlockedIncrement(&This->ref); LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref); TRACE("(%p) ref=%d\n", This, ref);
@ -462,7 +465,7 @@ static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface) static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
LONG ref = InterlockedDecrement(&This->ref); LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref); TRACE("(%p) ref=%d\n", This, ref);
@ -491,7 +494,7 @@ static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo) static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
TRACE("(%p)->(%p)\n", This, pctinfo); TRACE("(%p)->(%p)\n", This, pctinfo);
@ -502,7 +505,7 @@ static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pcti
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid, static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo, LCID lcid,
ITypeInfo **ppTInfo) ITypeInfo **ppTInfo)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -511,7 +514,7 @@ static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
LPOLESTR *rgszNames, UINT cNames, LCID lcid, LPOLESTR *rgszNames, UINT cNames, LCID lcid,
DISPID *rgDispId) DISPID *rgDispId)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
UINT i; UINT i;
HRESULT hres; HRESULT hres;
@ -519,7 +522,7 @@ static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
lcid, rgDispId); lcid, rgDispId);
for(i=0; i < cNames; i++) { for(i=0; i < cNames; i++) {
hres = IDispatchEx_GetDispID(_IDispatchEx_(This), rgszNames[i], 0, rgDispId+i); hres = IDispatchEx_GetDispID(&This->IDispatchEx_iface, rgszNames[i], 0, rgDispId+i);
if(FAILED(hres)) if(FAILED(hres))
return hres; return hres;
} }
@ -531,18 +534,18 @@ static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember,
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
return IDispatchEx_InvokeEx(_IDispatchEx_(This), dispIdMember, lcid, wFlags, return IDispatchEx_InvokeEx(&This->IDispatchEx_iface, dispIdMember, lcid, wFlags,
pDispParams, pVarResult, pExcepInfo, NULL); pDispParams, pVarResult, pExcepInfo, NULL);
} }
static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid); TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid);
@ -557,7 +560,7 @@ static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DW
static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp, static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller) VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
dispex_prop_t *prop; dispex_prop_t *prop;
jsexcept_t jsexcept; jsexcept_t jsexcept;
HRESULT hres; HRESULT hres;
@ -623,7 +626,7 @@ static HRESULT delete_prop(dispex_prop_t *prop)
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex) static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
dispex_prop_t *prop; dispex_prop_t *prop;
HRESULT hres; HRESULT hres;
@ -645,7 +648,7 @@ static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bst
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id) static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
dispex_prop_t *prop; dispex_prop_t *prop;
TRACE("(%p)->(%x)\n", This, id); TRACE("(%p)->(%x)\n", This, id);
@ -661,14 +664,14 @@ static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex) static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
FIXME("(%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex); FIXME("(%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex);
return E_NOTIMPL; return E_NOTIMPL;
} }
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName) static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
dispex_prop_t *prop; dispex_prop_t *prop;
TRACE("(%p)->(%x %p)\n", This, id, pbstrName); TRACE("(%p)->(%x %p)\n", This, id, pbstrName);
@ -686,7 +689,7 @@ static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BS
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid) static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
dispex_prop_t *iter; dispex_prop_t *iter;
HRESULT hres; HRESULT hres;
@ -718,13 +721,11 @@ static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex,
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk) static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
{ {
jsdisp_t *This = DISPATCHEX_THIS(iface); jsdisp_t *This = impl_from_IDispatchEx(iface);
FIXME("(%p)->(%p)\n", This, ppunk); FIXME("(%p)->(%p)\n", This, ppunk);
return E_NOTIMPL; return E_NOTIMPL;
} }
#undef DISPATCHEX_THIS
static IDispatchExVtbl DispatchExVtbl = { static IDispatchExVtbl DispatchExVtbl = {
DispatchEx_QueryInterface, DispatchEx_QueryInterface,
DispatchEx_AddRef, DispatchEx_AddRef,
@ -747,7 +748,7 @@ HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *b
{ {
TRACE("%p (%p)\n", dispex, prototype); TRACE("%p (%p)\n", dispex, prototype);
dispex->lpIDispatchExVtbl = &DispatchExVtbl; dispex->IDispatchEx_iface.lpVtbl = &DispatchExVtbl;
dispex->ref = 1; dispex->ref = 1;
dispex->builtin_info = builtin_info; dispex->builtin_info = builtin_info;

View File

@ -170,7 +170,7 @@ typedef struct {
} builtin_info_t; } builtin_info_t;
struct jsdisp_t { struct jsdisp_t {
const IDispatchExVtbl *lpIDispatchExVtbl; IDispatchEx IDispatchEx_iface;
LONG ref; LONG ref;
@ -184,21 +184,19 @@ struct jsdisp_t {
const builtin_info_t *builtin_info; const builtin_info_t *builtin_info;
}; };
#define _IDispatchEx_(x) ((IDispatchEx*) &(x)->lpIDispatchExVtbl)
static inline IDispatch *to_disp(jsdisp_t *jsdisp) static inline IDispatch *to_disp(jsdisp_t *jsdisp)
{ {
return (IDispatch*)&jsdisp->lpIDispatchExVtbl; return (IDispatch*)&jsdisp->IDispatchEx_iface;
} }
static inline void jsdisp_addref(jsdisp_t *jsdisp) static inline void jsdisp_addref(jsdisp_t *jsdisp)
{ {
IDispatchEx_AddRef(_IDispatchEx_(jsdisp)); IDispatchEx_AddRef(&jsdisp->IDispatchEx_iface);
} }
static inline void jsdisp_release(jsdisp_t *jsdisp) static inline void jsdisp_release(jsdisp_t *jsdisp)
{ {
IDispatchEx_Release(_IDispatchEx_(jsdisp)); IDispatchEx_Release(&jsdisp->IDispatchEx_iface);
} }
HRESULT create_dispex(script_ctx_t*,const builtin_info_t*,jsdisp_t*,jsdisp_t**); HRESULT create_dispex(script_ctx_t*,const builtin_info_t*,jsdisp_t*,jsdisp_t**);