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;
|
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;
|
||||||
|
|
||||||
|
|
|
@ -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**);
|
||||||
|
|
Loading…
Reference in New Issue