On Tue, May 28, 2002 at 11:25:52AM -0700, Medland, Bill wrote:
Is this an oversight or a deliberate policy?
Remote_CoGetClassObject creates the local server process and hands over to create_marshalled_proxy If create_marshalled_proxy can't immediately find the pipe then it will create the process again.
Is it safe to drop the first one? How about the second? It looks to me as if Remote_CoGetClassObject is the only place that calls create_marshalled_proxy so I presume we can remove either.
Yes.
I have tested following patch with dw4 install.
Ciao, Marcus
License: LGPL Changelog: Dropped superflous Remote_CoGetClassObject() (entirely contained in create_marshalled_proxy()).
Index: compobj.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/compobj.c,v retrieving revision 1.55 diff -u -r1.55 compobj.c --- compobj.c 9 Mar 2002 23:39:09 -0000 1.55 +++ compobj.c 28 May 2002 21:40:28 -0000 @@ -1293,42 +1293,6 @@ return hr; }
-static HRESULT WINAPI Remote_CoGetClassObject( - REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, - REFIID iid, LPVOID *ppv -) { - HKEY key; - char buf[200]; - HRESULT hres = E_UNEXPECTED; - char xclsid[80]; - WCHAR dllName[MAX_PATH+1]; - DWORD dllNameLen = sizeof(dllName); - STARTUPINFOW sinfo; - PROCESS_INFORMATION pinfo; - - WINE_StringFromCLSID((LPCLSID)rclsid,xclsid); - - sprintf(buf,"CLSID\%s\LocalServer32",xclsid); - hres = RegOpenKeyExA(HKEY_CLASSES_ROOT, buf, 0, KEY_READ, &key); - - if (hres != ERROR_SUCCESS) - return REGDB_E_CLASSNOTREG; - - memset(dllName,0,sizeof(dllName)); - hres= RegQueryValueExW(key,NULL,NULL,NULL,(LPBYTE)dllName,&dllNameLen); - if (hres) - return REGDB_E_CLASSNOTREG; /* FIXME: check retval */ - RegCloseKey(key); - - TRACE("found LocalServer32 exe %s\n", debugstr_w(dllName)); - - memset(&sinfo,0,sizeof(sinfo)); - sinfo.cb = sizeof(sinfo); - if (!CreateProcessW(NULL,dllName,NULL,NULL,FALSE,0,NULL,NULL,&sinfo,&pinfo)) - return E_FAIL; - return create_marshalled_proxy(rclsid,iid,ppv); -} - /*********************************************************************** * CoGetClassObject [COMPOBJ.7] * CoGetClassObject [OLE32.16] @@ -1389,7 +1353,9 @@
if (((CLSCTX_LOCAL_SERVER) & dwClsContext) && !((CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER) & dwClsContext)) - return Remote_CoGetClassObject(rclsid,dwClsContext,pServerInfo,iid,ppv); + return create_marshalled_proxy(rclsid,iid,ppv); + +
/* remote servers not supported yet */ if ( ((CLSCTX_REMOTE_SERVER) & dwClsContext)