jscript: COM cleanup for the IDispatchEx iface.
This commit is contained in:
parent
c28d6f38af
commit
3cb9886ea7
|
@ -420,21 +420,24 @@ static HRESULT fill_protrefs(jsdisp_t *This)
|
|||
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)
|
||||
{
|
||||
jsdisp_t *This = DISPATCHEX_THIS(iface);
|
||||
jsdisp_t *This = impl_from_IDispatchEx(iface);
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = _IDispatchEx_(This);
|
||||
*ppv = &This->IDispatchEx_iface;
|
||||
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||
*ppv = _IDispatchEx_(This);
|
||||
*ppv = &This->IDispatchEx_iface;
|
||||
}else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
|
||||
*ppv = _IDispatchEx_(This);
|
||||
*ppv = &This->IDispatchEx_iface;
|
||||
}else if(IsEqualGUID(&IID_IDispatchJS, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatchJS %p)\n", This, ppv);
|
||||
jsdisp_addref(This);
|
||||
|
@ -452,7 +455,7 @@ static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid,
|
|||
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
jsdisp_t *This = DISPATCHEX_THIS(iface);
|
||||
jsdisp_t *This = impl_from_IDispatchEx(iface);
|
||||
LONG ref = InterlockedDecrement(&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)
|
||||
{
|
||||
jsdisp_t *This = DISPATCHEX_THIS(iface);
|
||||
jsdisp_t *This = impl_from_IDispatchEx(iface);
|
||||
|
||||
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,
|
||||
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);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
@ -511,7 +514,7 @@ static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
|
|||
LPOLESTR *rgszNames, UINT cNames, LCID lcid,
|
||||
DISPID *rgDispId)
|
||||
{
|
||||
jsdisp_t *This = DISPATCHEX_THIS(iface);
|
||||
jsdisp_t *This = impl_from_IDispatchEx(iface);
|
||||
UINT i;
|
||||
HRESULT hres;
|
||||
|
||||
|
@ -519,7 +522,7 @@ static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
|
|||
lcid, rgDispId);
|
||||
|
||||
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))
|
||||
return hres;
|
||||
}
|
||||
|
@ -531,18 +534,18 @@ static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember,
|
|||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
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),
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
|
@ -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,
|
||||
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
|
||||
{
|
||||
jsdisp_t *This = DISPATCHEX_THIS(iface);
|
||||
jsdisp_t *This = impl_from_IDispatchEx(iface);
|
||||
dispex_prop_t *prop;
|
||||
jsexcept_t jsexcept;
|
||||
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)
|
||||
{
|
||||
jsdisp_t *This = DISPATCHEX_THIS(iface);
|
||||
jsdisp_t *This = impl_from_IDispatchEx(iface);
|
||||
dispex_prop_t *prop;
|
||||
HRESULT hres;
|
||||
|
||||
|
@ -645,7 +648,7 @@ static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bst
|
|||
|
||||
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;
|
||||
|
||||
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)
|
||||
{
|
||||
jsdisp_t *This = DISPATCHEX_THIS(iface);
|
||||
jsdisp_t *This = impl_from_IDispatchEx(iface);
|
||||
FIXME("(%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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)
|
||||
{
|
||||
jsdisp_t *This = DISPATCHEX_THIS(iface);
|
||||
jsdisp_t *This = impl_from_IDispatchEx(iface);
|
||||
dispex_prop_t *iter;
|
||||
HRESULT hres;
|
||||
|
||||
|
@ -718,13 +721,11 @@ static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex,
|
|||
|
||||
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);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef DISPATCHEX_THIS
|
||||
|
||||
static IDispatchExVtbl DispatchExVtbl = {
|
||||
DispatchEx_QueryInterface,
|
||||
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);
|
||||
|
||||
dispex->lpIDispatchExVtbl = &DispatchExVtbl;
|
||||
dispex->IDispatchEx_iface.lpVtbl = &DispatchExVtbl;
|
||||
dispex->ref = 1;
|
||||
dispex->builtin_info = builtin_info;
|
||||
|
||||
|
|
|
@ -170,7 +170,7 @@ typedef struct {
|
|||
} builtin_info_t;
|
||||
|
||||
struct jsdisp_t {
|
||||
const IDispatchExVtbl *lpIDispatchExVtbl;
|
||||
IDispatchEx IDispatchEx_iface;
|
||||
|
||||
LONG ref;
|
||||
|
||||
|
@ -184,21 +184,19 @@ struct jsdisp_t {
|
|||
const builtin_info_t *builtin_info;
|
||||
};
|
||||
|
||||
#define _IDispatchEx_(x) ((IDispatchEx*) &(x)->lpIDispatchExVtbl)
|
||||
|
||||
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)
|
||||
{
|
||||
IDispatchEx_AddRef(_IDispatchEx_(jsdisp));
|
||||
IDispatchEx_AddRef(&jsdisp->IDispatchEx_iface);
|
||||
}
|
||||
|
||||
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**);
|
||||
|
|
Loading…
Reference in New Issue