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)