Fixed OleLoadFromStream: Dereference ppvObj and get IPersistStream

instead of accessing IUnknown.
This commit is contained in:
Marcus Meissner 2000-10-28 00:30:42 +00:00 committed by Alexandre Julliard
parent f9b6d7bb27
commit 52475287da

View file

@ -5686,22 +5686,30 @@ HRESULT WINAPI ReadClassStg(IStorage *pstg,CLSID *pclsid){
*/ */
HRESULT WINAPI OleLoadFromStream(IStream *pStm,REFIID iidInterface,void** ppvObj) HRESULT WINAPI OleLoadFromStream(IStream *pStm,REFIID iidInterface,void** ppvObj)
{ {
CLSID clsid; CLSID clsid;
HRESULT res; HRESULT res;
LPPERSISTSTREAM xstm;
FIXME("(),stub!\n"); TRACE("(%p,%s,%p)\n",pStm,debugstr_guid(iidInterface),ppvObj);
res=ReadClassStm(pStm,&clsid); res=ReadClassStm(pStm,&clsid);
if (!SUCCEEDED(res))
if (SUCCEEDED(res)){ return res;
res=CoCreateInstance(&clsid,NULL,CLSCTX_INPROC_SERVER,iidInterface,ppvObj);
res=CoCreateInstance(&clsid,NULL,CLSCTX_INPROC_SERVER,iidInterface,ppvObj); if (!SUCCEEDED(res))
return res;
if (SUCCEEDED(res)) res=IUnknown_QueryInterface((IUnknown*)*ppvObj,&IID_IPersistStream,(LPVOID*)&xstm);
if (!SUCCEEDED(res)) {
res=IPersistStream_Load((IPersistStream*)ppvObj,pStm); IUnknown_Release((IUnknown*)*ppvObj);
return res;
} }
res=IPersistStream_Load(xstm,pStm);
IPersistStream_Release(xstm);
/* FIXME: all refcounts ok at this point? I think they should be:
* pStm : unchanged
* ppvObj : 1
* xstm : 0 (released)
*/
return res; return res;
} }