From 00457c7f3dc9bcd2ba1952d77c7cec5001efb2f6 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Sun, 6 Sep 2009 18:52:49 +0200 Subject: [PATCH] mshtml: Added GetMemberName implementation. --- dlls/mshtml/dispex.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index d21d8eeb010..c58b3ce9e98 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -892,8 +892,37 @@ static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName) { DispatchEx *This = DISPATCHEX_THIS(iface); - FIXME("(%p)->(%x %p)\n", This, id, pbstrName); - return E_NOTIMPL; + dispex_data_t *data; + func_info_t *func; + HRESULT hres; + + TRACE("(%p)->(%x %p)\n", This, id, pbstrName); + + if(is_dynamic_dispid(id)) { + DWORD idx = id - DISPID_DYNPROP_0; + + if(!This->dynamic_data || This->dynamic_data->prop_cnt <= idx) + return DISP_E_UNKNOWNNAME; + + *pbstrName = SysAllocString(This->dynamic_data->props[idx].name); + if(!*pbstrName) + return E_OUTOFMEMORY; + + return S_OK; + } + + data = get_dispex_data(This); + if(!data) + return E_FAIL; + + hres = get_builtin_func(data, id, &func); + if(FAILED(hres)) + return hres; + + *pbstrName = SysAllocString(func->name); + if(!*pbstrName) + return E_OUTOFMEMORY; + return S_OK; } static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)