/*************************************************************************** * get_storage * * Retrieve an object's storage from a variety of sources. * * FIXME: CF_FILENAME. */ static HRESULT get_storage(IDataObject *data, IStorage *stg, UINT *src_cf) { HRESULT hr; FORMATETC fmt; STGMEDIUM med; IPersistStorage *persist; CLSID clsid; *src_cf = 0; /* CF_EMBEDEDOBJECT */ init_fmtetc(&fmt, embedded_object_clipboard_format, TYMED_ISTORAGE); med.tymed = TYMED_ISTORAGE; med.u.pstg = stg; hr = IDataObject_GetDataHere(data, &fmt, &med); if(SUCCEEDED(hr)) { *src_cf = embedded_object_clipboard_format; return hr; } /* CF_EMBEDSOURCE */ init_fmtetc(&fmt, embed_source_clipboard_format, TYMED_ISTORAGE); med.tymed = TYMED_ISTORAGE; med.u.pstg = stg; hr = IDataObject_GetDataHere(data, &fmt, &med); if(SUCCEEDED(hr)) { *src_cf = embed_source_clipboard_format; return hr; } /* IPersistStorage */ hr = IDataObject_QueryInterface(data, &IID_IPersistStorage, (void**)&persist); if(FAILED(hr)) return hr; hr = IPersistStorage_GetClassID(persist, &clsid); if(FAILED(hr)) goto end; hr = IStorage_SetClass(stg, &clsid); if(FAILED(hr)) goto end; hr = IPersistStorage_Save(persist, stg, FALSE); if(FAILED(hr)) goto end; hr = IPersistStorage_SaveCompleted(persist, NULL); end: IPersistStorage_Release(persist); return hr; }
static HRESULT WINAPI PersistStreamInit_GetClassID(IPersistStreamInit *iface, CLSID *pClassID) { WebBrowser *This = PERSTRINIT_THIS(iface); return IPersistStorage_GetClassID(PERSTORAGE(This), pClassID); }