static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface, LPCOLESTR pstrName, DWORD dwFlags) { JScript *This = impl_from_IActiveScript(iface); named_item_t *item; IDispatch *disp = NULL; HRESULT hres; TRACE("(%p)->(%s %x)\n", This, debugstr_w(pstrName), dwFlags); if(This->thread_id != GetCurrentThreadId() || !This->ctx || This->ctx->state == SCRIPTSTATE_CLOSED) return E_UNEXPECTED; if(dwFlags & SCRIPTITEM_GLOBALMEMBERS) { IUnknown *unk; hres = IActiveScriptSite_GetItemInfo(This->site, pstrName, SCRIPTINFO_IUNKNOWN, &unk, NULL); if(FAILED(hres)) { WARN("GetItemInfo failed: %08x\n", hres); return hres; } hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&disp); IUnknown_Release(unk); if(FAILED(hres)) { WARN("object does not implement IDispatch\n"); return hres; } if(This->ctx->host_global) IDispatch_Release(This->ctx->host_global); IDispatch_AddRef(disp); This->ctx->host_global = disp; } item = heap_alloc(sizeof(*item)); if(!item) { if(disp) IDispatch_Release(disp); return E_OUTOFMEMORY; } item->disp = disp; item->flags = dwFlags; item->name = heap_strdupW(pstrName); if(!item->name) { if(disp) IDispatch_Release(disp); heap_free(item); return E_OUTOFMEMORY; } item->next = This->ctx->named_items; This->ctx->named_items = item; return S_OK; }
static HRESULT WINAPI ActiveScript_AddNamedItem(IActiveScript *iface, LPCOLESTR pstrName, DWORD dwFlags) { IDispatchEx *dispex; IDispatch *disp; IUnknown *unk = NULL, *unk2; HRESULT hres; static const WCHAR windowW[] = {'w','i','n','d','o','w',0}; static const IID unknown_iid = {0x719C3050,0xF9D3,0x11CF,{0xA4,0x93,0x00,0x40,0x05,0x23,0xA8,0xA0}}; CHECK_EXPECT(AddNamedItem); ok(!lstrcmpW(pstrName, windowW), "pstrName=%s\n", debugstr_w(pstrName)); ok(dwFlags == (SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS), "dwFlags=%x\n", dwFlags); hres = IActiveScriptSite_GetItemInfo(site, windowW, SCRIPTINFO_IUNKNOWN, &unk, NULL); ok(hres == S_OK, "GetItemInfo failed: %08x\n", hres); ok(unk != NULL, "unk == NULL\n"); hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&disp); ok(hres == S_OK, "Could not get IDispatch interface: %08x\n", hres); if(SUCCEEDED(hres)) IDispatch_Release(disp); hres = IUnknown_QueryInterface(unk, &unknown_iid, (void**)&unk2); ok(hres == E_NOINTERFACE, "Got ?? interface: %p\n", unk2); if(SUCCEEDED(hres)) IUnknown_Release(unk2); hres = IUnknown_QueryInterface(unk, &IID_IDispatchEx, (void**)&dispex); ok(hres == S_OK, "Could not get IDispatchEx interface: %08x\n", hres); if(SUCCEEDED(hres)) IDispatchEx_Release(dispex); IUnknown_Release(unk); return S_OK; }