Commit in reactos/lib/ole32 on MAIN
compobj.c+2-21.9 -> 1.10
datacache.c+2-21.4 -> 1.5
defaulthandler.c+4-41.3 -> 1.4
filemoniker.c+3-31.6 -> 1.7
ifs.c+9-91.7 -> 1.8
itemmoniker.c+5-51.5 -> 1.6
marshal.c+64-341.3 -> 1.4
moniker.c+1-11.7 -> 1.8
ole2.c+9-91.14 -> 1.15
ole2impl.c+2-21.2 -> 1.3
oleproxy.c+4-31.4 -> 1.5
storage32.c+4-11.5 -> 1.6
+109-75
12 modified files
Sync to Wine-20040615:
Marcus Meissner <marcus@jet.franken.de>
- Revert broken strict aliasing fix.
Robert Shearman <R.J.Shearman@warwick.ac.uk>
- Fix ref count on standard proxy creation.
- Release channel buffer in StdMarshal_UnmarshalInterface, since we no
  longer use it and the proxy should have taken a reference on it.
- Add a few comments.
- Fixed CoMarshalInterThreadInterfaceInStream and
  CoGetInterfaceAndReleaseStream.
Patrik Stridvall <ps@leissner.se>
- Fixed some issues found by winapi_check.

reactos/lib/ole32
compobj.c 1.9 -> 1.10
diff -u -r1.9 -r1.10
--- compobj.c	8 May 2004 13:32:51 -0000	1.9
+++ compobj.c	16 Jun 2004 07:06:49 -0000	1.10
@@ -1015,7 +1015,7 @@
     strcpy(pipefn,PIPEPREF);
     WINE_StringFromCLSID(&newClass->classIdentifier,pipefn+strlen(PIPEPREF));
 
-    hres = IUnknown_QueryInterface(newClass->classObject,&IID_IClassFactory,(LPVOID*)(char*)&classfac);
+    hres = IUnknown_QueryInterface(newClass->classObject,&IID_IClassFactory,(LPVOID*)&classfac);
     if (hres) return hres;
 
     hres = CreateStreamOnHGlobal(0,TRUE,&pStm);
@@ -1543,7 +1543,7 @@
 			pUnkOuter,
 			dwClsContext,
 			&IID_IUnknown,
-			(VOID**)(char*)&pUnk);
+			(VOID**)&pUnk);
 
   if (hr)
     return hr;

reactos/lib/ole32
datacache.c 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- datacache.c	8 May 2004 13:32:51 -0000	1.4
+++ datacache.c	16 Jun 2004 07:06:49 -0000	1.5
@@ -1085,7 +1085,7 @@
   {
     /* Get the Persist Storage */
 
-    hr = IDataObject_QueryInterface(iface, &IID_IPersistStorage, (void**)(char*)&pPersistStorage);
+    hr = IDataObject_QueryInterface(iface, &IID_IPersistStorage, (void**)&pPersistStorage);
 
     if (hr != S_OK)
       goto cleanup;
@@ -1214,7 +1214,7 @@
 
   TRACE("(%p, %p, %p, %d)\n", iface, pformatetc, pmedium, fRelease);
 
-  hres = IDataObject_QueryInterface(iface, &IID_IOleCache2, (void**)(char*)&oleCache);
+  hres = IDataObject_QueryInterface(iface, &IID_IOleCache2, (void**)&oleCache);
 
   if (FAILED(hres))
     return E_UNEXPECTED;

reactos/lib/ole32
defaulthandler.c 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- defaulthandler.c	8 May 2004 13:32:51 -0000	1.3
+++ defaulthandler.c	16 Jun 2004 07:06:50 -0000	1.4
@@ -1103,7 +1103,7 @@
 
   TRACE("(%p, %lx, %p)\n", iface, dwDrawAspect, psizel);
 
-  hres = IUnknown_QueryInterface(this->dataCache, &IID_IViewObject2, (void**)(char*)&cacheView);
+  hres = IUnknown_QueryInterface(this->dataCache, &IID_IViewObject2, (void**)&cacheView);
 
   if (FAILED(hres))
     return E_UNEXPECTED;
@@ -1337,7 +1337,7 @@
 
   hres = IUnknown_QueryInterface(this->dataCache,
 				 &IID_IDataObject,
-				 (void**)(char*)&cacheDataObject);
+				 (void**)&cacheDataObject);
 
   if (FAILED(hres))
     return E_UNEXPECTED;
@@ -1381,7 +1381,7 @@
 
   hres = IUnknown_QueryInterface(this->dataCache,
 				 &IID_IDataObject,
-				 (void**)(char*)&cacheDataObject);
+				 (void**)&cacheDataObject);
 
   if (FAILED(hres))
     return E_UNEXPECTED;
@@ -1434,7 +1434,7 @@
 
   hres = IUnknown_QueryInterface(this->dataCache,
 				 &IID_IDataObject,
-				 (void**)(char*)&cacheDataObject);
+				 (void**)&cacheDataObject);
 
   if (FAILED(hres))
     return E_UNEXPECTED;

reactos/lib/ole32
filemoniker.c 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- filemoniker.c	8 May 2004 13:32:51 -0000	1.6
+++ filemoniker.c	16 Jun 2004 07:06:50 -0000	1.7
@@ -587,7 +587,7 @@
                 res=GetClassFile(This->filePathName,&clsID);
                 if (SUCCEEDED(res)){
 
-                    res=CoCreateInstance(&clsID,NULL,CLSCTX_ALL,&IID_IPersistFile,(void**)(char*)&ppf);
+                    res=CoCreateInstance(&clsID,NULL,CLSCTX_ALL,&IID_IPersistFile,(void**)&ppf);
                     if (SUCCEEDED(res)){
 
                         res=IPersistFile_Load(ppf,This->filePathName,STGM_READ);
@@ -602,11 +602,11 @@
         }
     }
     else{
-        res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IClassFactory,(void**)(char*)&pcf);
+        res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IClassFactory,(void**)&pcf);
 
         if (res==E_NOINTERFACE){
 
-            res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IClassActivator,(void**)(char*)&pca);
+            res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IClassActivator,(void**)&pca);
 
             if (res==E_NOINTERFACE)
                 return MK_E_INTERMEDIATEINTERFACENOTSUPPORTED;

reactos/lib/ole32
ifs.c 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- ifs.c	8 May 2004 13:32:51 -0000	1.7
+++ ifs.c	16 Jun 2004 07:06:50 -0000	1.8
@@ -144,7 +144,7 @@
 	TRACE("(%s,%p)\n",debugstr_guid(refiid),obj);
 
 	if (IsEqualIID(&IID_IUnknown,refiid) || IsEqualIID(&IID_IMalloc,refiid)) {
-		*obj = (LPMALLOC)(char*)&Malloc32;
+		*obj = (LPMALLOC)&Malloc32;
 		return S_OK;
 	}
 	return E_NOINTERFACE;
@@ -380,7 +380,7 @@
 	TRACE("(%s,%p)\n",debugstr_guid(refiid),obj);
 
 	if (IsEqualIID(&IID_IUnknown,refiid) || IsEqualIID(&IID_IMallocSpy,refiid)) {
-		*obj = (LPMALLOC)(char*)&MallocSpy;
+		*obj = (LPMALLOC)&MallocSpy;
 		return S_OK;
 	}
 	return E_NOINTERFACE;
@@ -530,7 +530,7 @@
  */
 HRESULT WINAPI CoGetMalloc(DWORD dwMemContext, LPMALLOC *lpMalloc)
 {
-        *lpMalloc = (LPMALLOC)(char*)&Malloc32;
+        *lpMalloc = (LPMALLOC)&Malloc32;
         return S_OK;
 }
 
@@ -541,14 +541,14 @@
  */
 LPVOID WINAPI CoTaskMemAlloc(ULONG size)
 {
-        return IMalloc_Alloc((LPMALLOC)(char*)&Malloc32,size);
+        return IMalloc_Alloc((LPMALLOC)&Malloc32,size);
 }
 /***********************************************************************
  *           CoTaskMemFree      [OLE32.@]
  */
 VOID WINAPI CoTaskMemFree(LPVOID ptr)
 {
-        IMalloc_Free((LPMALLOC)(char*)&Malloc32, ptr);
+        IMalloc_Free((LPMALLOC)&Malloc32, ptr);
 }
 
 /***********************************************************************
@@ -558,7 +558,7 @@
  */
 LPVOID WINAPI CoTaskMemRealloc(LPVOID pvOld, ULONG size)
 {
-        return IMalloc_Realloc((LPMALLOC)(char*)&Malloc32, pvOld, size);
+        return IMalloc_Realloc((LPMALLOC)&Malloc32, pvOld, size);
 }
 
 /***********************************************************************
@@ -576,13 +576,13 @@
 	TRACE("\n");
 
 	/* HACK TO ACTIVATE OUT SPY */
-	if (pMallocSpy == (LPVOID)-1) pMallocSpy =(IMallocSpy*)(char*)&MallocSpy;
+	if (pMallocSpy == (LPVOID)-1) pMallocSpy =(IMallocSpy*)&MallocSpy;
 
 	if(Malloc32.pSpy) return CO_E_OBJISREG;
 
         EnterCriticalSection(&IMalloc32_SpyCS);
 
-	if (SUCCEEDED(IUnknown_QueryInterface(pMallocSpy, &IID_IMallocSpy, (LPVOID*)(char*)&pSpy))) {
+	if (SUCCEEDED(IUnknown_QueryInterface(pMallocSpy, &IID_IMallocSpy, (LPVOID*)&pSpy))) {
 	    Malloc32.pSpy = pSpy;
 	    hres = S_OK;
 	}
@@ -607,7 +607,7 @@
         EnterCriticalSection(&IMalloc32_SpyCS);
 
 	/* if it's our spy it's time to dump the leaks */
-	if (Malloc32.pSpy == (IMallocSpy*)(char*)&MallocSpy) {
+	if (Malloc32.pSpy == (IMallocSpy*)&MallocSpy) {
 	    MallocSpyDumpLeaks();
 	}
 

reactos/lib/ole32
itemmoniker.c 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- itemmoniker.c	8 May 2004 13:32:51 -0000	1.5
+++ itemmoniker.c	16 Jun 2004 07:06:50 -0000	1.6
@@ -454,7 +454,7 @@
 
     *ppvResult=0;
 
-    res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&refid,(void**)(char*)&poic);
+    res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&refid,(void**)&poic);
 
     if (SUCCEEDED(res)){
 
@@ -487,7 +487,7 @@
     if(pmkToLeft==NULL)
         return E_INVALIDARG;
 
-    res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IOleItemContainer,(void**)(char*)&poic);
+    res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IOleItemContainer,(void**)&poic);
 
     if (SUCCEEDED(res)){
 
@@ -715,7 +715,7 @@
         /* requesting an IOleItemContainer interface pointer. The method then calls IOleItemContainer::IsRunning,*/
         /* passing the string contained within this moniker. */
 
-        res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IOleItemContainer,(void**)(char*)&poic);
+        res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IOleItemContainer,(void**)&poic);
 
         if (SUCCEEDED(res)){
 
@@ -876,11 +876,11 @@
         /* Otherwise, the method calls IMoniker::BindToObject on the pmkToLeft parameter, requesting an */
         /* IParseDisplayName interface pointer to the object identified by the moniker, and passes the display */
         /* name to IParseDisplayName::ParseDisplayName */
-        res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IOleItemContainer,(void**)(char*)&poic);
+        res=IMoniker_BindToObject(pmkToLeft,pbc,NULL,&IID_IOleItemContainer,(void**)&poic);
 
         if (SUCCEEDED(res)){
 
-            res=IOleItemContainer_GetObject(poic,This->itemName,BINDSPEED_MODERATE,pbc,&IID_IParseDisplayName,(void**)(char*)&ppdn);
+            res=IOleItemContainer_GetObject(poic,This->itemName,BINDSPEED_MODERATE,pbc,&IID_IParseDisplayName,(void**)&ppdn);
 
             res=IMoniker_GetDisplayName(iface,pbc,NULL,&displayName);
 

reactos/lib/ole32
marshal.c 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- marshal.c	8 May 2004 13:32:51 -0000	1.3
+++ marshal.c	16 Jun 2004 07:06:50 -0000	1.4
@@ -256,7 +256,7 @@
   IPSFactoryBuffer	*psfacbuf;
 
   TRACE("(...,%s,...)\n",debugstr_guid(riid));
-  IUnknown_QueryInterface((LPUNKNOWN)pv,&IID_IUnknown,(LPVOID*)(char*)&pUnk);
+  IUnknown_QueryInterface((LPUNKNOWN)pv,&IID_IUnknown,(LPVOID*)&pUnk);
   mid.processid = GetCurrentProcessId();
   mid.objectid = (DWORD)pUnk; /* FIXME */
   IUnknown_Release(pUnk);
@@ -280,7 +280,7 @@
     FIXME("Failed to create a stub for %s\n",debugstr_guid(riid));
     return hres;
   }
-  IUnknown_QueryInterface((LPUNKNOWN)pv,riid,(LPVOID*)(char*)&pUnk);
+  IUnknown_QueryInterface((LPUNKNOWN)pv,riid,(LPVOID*)&pUnk);
   MARSHAL_Register_Stub(&mid,pUnk,stub);
   IUnknown_Release(pUnk);
   return S_OK;
@@ -315,13 +315,20 @@
     return hres;
   }
   hres = PIPE_GetNewPipeBuf(&mid,&chanbuf);
+  IPSFactoryBuffer_Release(psfacbuf);
   if (hres) {
     ERR("Failed to get an rpc channel buffer for %s\n",debugstr_guid(riid));
   } else {
+    /* Connect the channel buffer to the proxy and release the no longer
+     * needed proxy.
+     * NOTE: The proxy should have taken an extra reference because it also
+     * aggregates the object, so we can safely release our reference to it. */
     IRpcProxyBuffer_Connect(rpcproxy,chanbuf);
-    IRpcProxyBuffer_Release(rpcproxy); /* no need */
+    IRpcProxyBuffer_Release(rpcproxy);
+    /* IRpcProxyBuffer takes a reference on the channel buffer and
+     * we no longer need it, so release it */
+    IRpcChannelBuffer_Release(chanbuf);
   }
-  IPSFactoryBuffer_Release(psfacbuf);
   return hres;
 }
 
@@ -448,7 +455,7 @@
   );
   STUBMGR_Start(); /* Just to be sure we have one running. */
   mid.processid = GetCurrentProcessId();
-  IUnknown_QueryInterface(pUnk,&IID_IUnknown,(LPVOID*)(char*)&pUnknown);
+  IUnknown_QueryInterface(pUnk,&IID_IUnknown,(LPVOID*)&pUnknown);
   mid.objectid = (DWORD)pUnknown;
   IUnknown_Release(pUnknown);
   memcpy(&mid.iid,riid,sizeof(mid.iid));
@@ -523,7 +530,7 @@
       FIXME("Stream read 3 failed, %lx, (%ld of %d)\n",hres,res,sizeof(xclsid));
       return hres;
   }
-  hres=CoCreateInstance(&xclsid,NULL,CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER,&IID_IMarshal,(void**)(char*)&pUnk);
+  hres=CoCreateInstance(&xclsid,NULL,CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER,&IID_IMarshal,(void**)&pUnk);
   if (hres) {
       FIXME("Failed to create instance of unmarshaller %s.\n",debugstr_guid(&xclsid));
       return hres;
@@ -596,45 +603,68 @@
 /***********************************************************************
  *		CoMarshalInterThreadInterfaceInStream	[OLE32.@]
  *
- * Marshal interfaces across threads. We don't have a thread distinction,
- * meaning most interfaces just work across different threads, the RPC
- * handles it.
+ * Marshal an interface across threads in the same process.
+ *
+ * PARAMS
+ *  riid  [I] Identifier of the interface to be marshalled.
+ *  pUnk  [I] Pointer to IUnknown-derived interface that will be marshalled.
+ *  ppStm [O] Pointer to IStream object that is created and then used to store the marshalled inteface.
+ *
+ * RETURNS
+ *  Success: S_OK
+ *  Failure: E_OUTOFMEMORY and other COM error codes
+ *
+ * SEE
+ *   CoMarshalInterface(), CoUnmarshalInterface() and CoGetInterfaceAndReleaseStream()
  */
 HRESULT WINAPI
 CoMarshalInterThreadInterfaceInStream(
-  REFIID riid, LPUNKNOWN pUnk, LPSTREAM * ppStm
-) {
-  ULONG res;
-  ULARGE_INTEGER	xpos;
-  LARGE_INTEGER		seekto;
-  HRESULT		hres;
+  REFIID riid, LPUNKNOWN pUnk, LPSTREAM * ppStm)
+{
+    ULARGE_INTEGER	xpos;
+    LARGE_INTEGER		seekto;
+    HRESULT		hres;
+
+    TRACE("(%s, %p, %p)\n",debugstr_guid(riid), pUnk, ppStm);
+
+    hres = CreateStreamOnHGlobal(0, TRUE, ppStm);
+    if (FAILED(hres)) return hres;
+    hres = CoMarshalInterface(*ppStm, riid, pUnk, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
+
+    /* FIXME: is this needed? */
+    memset(&seekto,0,sizeof(seekto));
+    IStream_Seek(*ppStm,seekto,SEEK_SET,&xpos);
 
-  TRACE("(%s, %p, %p)\n",debugstr_guid(riid), pUnk, ppStm);
-  hres = CreateStreamOnHGlobal(0, TRUE, ppStm);
-  if (hres) return hres;
-  /* CoMarshalInterface(...); */
-  hres = IStream_Write(*ppStm,&pUnk,sizeof(LPUNKNOWN),&res);
-  if (hres) return hres;
-  memset(&seekto,0,sizeof(seekto));
-  IStream_Seek(*ppStm,seekto,SEEK_SET,&xpos);
-  return S_OK;
+    return hres;
 }
 
 /***********************************************************************
  *		CoGetInterfaceAndReleaseStream	[OLE32.@]
+ *
+ * Unmarshalls an inteface from a stream and then releases the stream.
+ *
+ * PARAMS
+ *  pStm [I] Stream that contains the marshalled inteface.
+ *  riid [I] Interface identifier of the object to unmarshall.
+ *  ppv  [O] Address of pointer where the requested interface object will be stored.
+ *
+ * RETURNS
+ *  Success: S_OK
+ *  Failure: A COM error code
+ *
+ * SEE
+ *  CoMarshalInterThreadInterfaceInStream() and CoUnmarshalInteface()
  */
 HRESULT WINAPI
-CoGetInterfaceAndReleaseStream(LPSTREAM pStm,REFIID riid, LPVOID *ppv) {
-  ULONG res;
-  HRESULT		hres;
-  LPUNKNOWN		pUnk;
+CoGetInterfaceAndReleaseStream(LPSTREAM pStm,REFIID riid, LPVOID *ppv)
+{
+    HRESULT hres;
 
-  TRACE("(,%s,)\n",debugstr_guid(riid));
-  /* CoUnmarshalInterface(...); */
-  hres = IStream_Read(pStm,&pUnk,sizeof(LPUNKNOWN),&res);
-  if (hres) return hres;
-  IStream_Release(pStm);
-  return IUnknown_QueryInterface(pUnk,riid,ppv);
+    TRACE("(%p, %s, %p)\n", pStm, debugstr_guid(riid), ppv);
+
+    hres = CoUnmarshalInterface(pStm, riid, ppv);
+    IStream_Release(pStm);
+    return hres;
 }
 
 static HRESULT WINAPI

reactos/lib/ole32
moniker.c 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- moniker.c	8 May 2004 13:32:51 -0000	1.7
+++ moniker.c	16 Jun 2004 07:06:50 -0000	1.8
@@ -505,7 +505,7 @@
   ICOM_THIS(IRunnableObject,pUnknown);
   LRESULT		ret;
 
-  ret = IRunnableObject_QueryInterface(This,&IID_IRunnableObject,(LPVOID*)(char*)&runable);
+  ret = IRunnableObject_QueryInterface(This,&IID_IRunnableObject,(LPVOID*)&runable);
   if (ret)
 	return 0; /* Appears to return no error. */
   ret  = IRunnableObject_Run(runable,NULL);

reactos/lib/ole32
ole2.c 1.14 -> 1.15
diff -u -r1.14 -r1.15
--- ole2.c	8 May 2004 13:32:51 -0000	1.14
+++ ole2.c	16 Jun 2004 07:06:50 -0000	1.15
@@ -710,7 +710,7 @@
 
   hres = IUnknown_QueryInterface(pUnknown,
 				 &IID_IRunnableObject,
-				 (void**)(char*)&runnable);
+				 (void**)&runnable);
 
   if (SUCCEEDED(hres))
   {
@@ -756,7 +756,7 @@
 			  NULL,
 			  CLSCTX_INPROC_HANDLER,
 			  &IID_IOleObject,
-			  (void**)(char*)&oleObject);
+			  (void**)&oleObject);
 
   /*
    * If that fails, as it will most times, load the default
@@ -767,7 +767,7 @@
     hres = OleCreateDefaultHandler(&storageInfo.clsid,
 				   NULL,
 				   &IID_IOleObject,
-				   (void**)(char*)&oleObject);
+				   (void**)&oleObject);
   }
 
   /*
@@ -786,7 +786,7 @@
    */
   hres = IOleObject_QueryInterface(oleObject,
 				   &IID_IPersistStorage,
-				   (void**)(char*)&persistStorage);
+				   (void**)&persistStorage);
 
   if (SUCCEEDED(hres))
   {
@@ -860,7 +860,7 @@
 
   hres = IUnknown_QueryInterface(pUnknown,
 				 &IID_IRunnableObject,
-				 (void**)(char*)&runnable);
+				 (void**)&runnable);
 
   if (SUCCEEDED(hres))
   {
@@ -2229,7 +2229,7 @@
 
   hres = IUnknown_QueryInterface(pUnk,
 				 &IID_IViewObject,
-				 (void**)(char*)&viewobject);
+				 (void**)&viewobject);
 
   if (SUCCEEDED(hres))
   {
@@ -2284,20 +2284,20 @@
 
     FIXME("\n\t%s\n\t%s semi-stub!\n", debugstr_guid(rclsid), debugstr_guid(riid));
 
-    if (SUCCEEDED((hres = CoCreateInstance(rclsid, 0, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER|CLSCTX_LOCAL_SERVER , riid, (LPVOID*)(char*)&pUnk))))
+    if (SUCCEEDED((hres = CoCreateInstance(rclsid, 0, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER|CLSCTX_LOCAL_SERVER , riid, (LPVOID*)&pUnk))))
     {
         if (pClientSite)
         {
             IOleObject * pOE;
             IPersistStorage * pPS;
-            if (SUCCEEDED((hres = IUnknown_QueryInterface( pUnk, &IID_IOleObject, (LPVOID*)(char*)&pOE))))
+            if (SUCCEEDED((hres = IUnknown_QueryInterface( pUnk, &IID_IOleObject, (LPVOID*)&pOE))))
             {
                 TRACE("trying to set clientsite %p\n", pClientSite);
                 hres1 = IOleObject_SetClientSite(pOE, pClientSite);
                 TRACE("-- result 0x%08lx\n", hres1);
                 IOleObject_Release(pOE);
             }
-            if (SUCCEEDED((hres = IUnknown_QueryInterface( pUnk, &IID_IPersistStorage, (LPVOID*)(char*)&pPS))))
+            if (SUCCEEDED((hres = IUnknown_QueryInterface( pUnk, &IID_IPersistStorage, (LPVOID*)&pPS))))
             {
                 TRACE("trying to set stg %p\n", pStg);
                 hres1 = IPersistStorage_InitNew(pPS, pStg);

reactos/lib/ole32
ole2impl.c 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- ole2impl.c	8 May 2004 13:32:51 -0000	1.2
+++ ole2impl.c	16 Jun 2004 07:06:50 -0000	1.3
@@ -151,7 +151,7 @@
           /* Create default handler for Persist storage */
 
           if (hr1 == S_OK)
-            hr1 = OleCreateDefaultHandler(&clsID, NULL, &IID_IPersistStorage, (LPVOID*)(char*)&pPersistStorage);
+            hr1 = OleCreateDefaultHandler(&clsID, NULL, &IID_IPersistStorage, (LPVOID*)&pPersistStorage);
 
           /* Load the storage to Persist storage */
 
@@ -161,7 +161,7 @@
           /* Query for IOleObject */
 
           if (hr1 == S_OK)
-            hr1 = IPersistStorage_QueryInterface(pPersistStorage, &IID_IOleObject, (LPVOID*)(char*)&pOleObject);
+            hr1 = IPersistStorage_QueryInterface(pPersistStorage, &IID_IOleObject, (LPVOID*)&pOleObject);
 
           /* Set client site with the IOleObject */
 

reactos/lib/ole32
oleproxy.c 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- oleproxy.c	8 May 2004 13:32:51 -0000	1.4
+++ oleproxy.c	16 Jun 2004 07:06:50 -0000	1.5
@@ -156,12 +156,12 @@
 	}
 	memcpy(&iid,msg->Buffer,sizeof(iid));
 	TRACE("->CreateInstance(%s)\n",debugstr_guid(&iid));
-	hres = IUnknown_QueryInterface(This->pUnkServer,&IID_IClassFactory,(LPVOID*)(char*)&classfac);
+	hres = IUnknown_QueryInterface(This->pUnkServer,&IID_IClassFactory,(LPVOID*)&classfac);
 	if (hres) {
 	    FIXME("Ole server does not provide a IClassFactory?\n");
 	    return hres;
 	}
-	hres = IClassFactory_CreateInstance(classfac,NULL,&iid,(LPVOID*)(char*)&ppv);
+	hres = IClassFactory_CreateInstance(classfac,NULL,&iid,(LPVOID*)&ppv);
 	IClassFactory_Release(classfac);
 	if (hres) {
 	    msg->cbBuffer = 0;
@@ -436,7 +436,8 @@
 
     cf->lpvtbl_cf	= &cfproxyvt;
     cf->lpvtbl_proxy	= &pspbvtbl;
-    cf->ref		= 2; /* we return 2 references to the object! */
+    /* 1 reference for the proxy and 1 for the object */
+    cf->ref		= 2;
     *ppv		= &(cf->lpvtbl_cf);
     *ppProxy		= &(cf->lpvtbl_proxy);
     return S_OK;

reactos/lib/ole32
storage32.c 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- storage32.c	8 May 2004 13:32:51 -0000	1.5
+++ storage32.c	16 Jun 2004 07:06:50 -0000	1.6
@@ -5536,6 +5536,9 @@
   return hr;
 }
 
+/******************************************************************************
+ *              StgCreateStorageEx        [OLE32.@]
+ */
 HRESULT WINAPI StgCreateStorageEx(const WCHAR* pwcsName, DWORD grfMode, DWORD stgfmt, DWORD grfAttrs, STGOPTIONS* pStgOptions, void* reserved, REFIID riid, void** ppObjectOpen)
 {
     TRACE("(%s, %lx, %lx, %lx, %p, %p, %p, %p)\n", debugstr_w(pwcsName),
@@ -5898,7 +5901,7 @@
     res=CoCreateInstance(&clsid,NULL,CLSCTX_INPROC_SERVER,iidInterface,ppvObj);
     if (!SUCCEEDED(res))
 	return res;
-    res=IUnknown_QueryInterface((IUnknown*)*ppvObj,&IID_IPersistStream,(LPVOID*)(char*)&xstm);
+    res=IUnknown_QueryInterface((IUnknown*)*ppvObj,&IID_IPersistStream,(LPVOID*)&xstm);
     if (!SUCCEEDED(res)) {
 	IUnknown_Release((IUnknown*)*ppvObj);
 	return res;
CVSspam 0.2.8