wine/dlls/ole32 compobj.c
Alexandre Julliard
julliard at wine.codeweavers.com
Sat Nov 12 13:11:21 CST 2005
ChangeSet ID: 21235
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at winehq.org 2005/11/12 13:11:21
Modified files:
dlls/ole32 : compobj.c
Log message:
Robert Shearman <rob at codeweavers.com>
Implement CLSCTX_INPROC_HANDLER in CoGetClassObject similar to
CLSCTX_INPROC_SERVER by looking at the InprocHandler32 registry key
instead of InprocServer32.
Patch: http://cvs.winehq.org/patch.py?id=21235
Old revision New revision Changes Path
1.167 1.168 +34 -4 wine/dlls/ole32/compobj.c
Index: wine/dlls/ole32/compobj.c
diff -u -p wine/dlls/ole32/compobj.c:1.167 wine/dlls/ole32/compobj.c:1.168
--- wine/dlls/ole32/compobj.c:1.167 12 Nov 2005 19:11:21 -0000
+++ wine/dlls/ole32/compobj.c 12 Nov 2005 19:11:21 -0000
@@ -1554,7 +1554,7 @@ static HRESULT get_inproc_class_object(H
if ((hLibrary = LoadLibraryExW(dllpath, 0, LOAD_WITH_ALTERED_SEARCH_PATH)) == 0)
{
/* failure: DLL could not be loaded */
- ERR("couldn't load InprocServer32 dll %s\n", debugstr_w(dllpath));
+ ERR("couldn't load in-process dll %s\n", debugstr_w(dllpath));
return E_ACCESSDENIED; /* FIXME: or should this be CO_E_DLLNOTFOUND? */
}
@@ -1612,8 +1612,8 @@ HRESULT WINAPI CoGetClassObject(
return hres;
}
- /* first try: in-process */
- if ((CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER) & dwClsContext)
+ /* First try in-process server */
+ if (CLSCTX_INPROC_SERVER & dwClsContext)
{
static const WCHAR wszInprocServer32[] = {'I','n','p','r','o','c','S','e','r','v','e','r','3','2',0};
HKEY hkey;
@@ -1624,7 +1624,34 @@ HRESULT WINAPI CoGetClassObject(
if (hres == REGDB_E_CLASSNOTREG)
ERR("class %s not registered\n", debugstr_guid(rclsid));
else
- WARN("class %s not registered inproc\n", debugstr_guid(rclsid));
+ WARN("class %s not registered as in-proc server\n", debugstr_guid(rclsid));
+ }
+
+ if (SUCCEEDED(hres))
+ {
+ hres = get_inproc_class_object(hkey, rclsid, iid, ppv);
+ RegCloseKey(hkey);
+ }
+
+ /* return if we got a class, otherwise fall through to one of the
+ * other types */
+ if (SUCCEEDED(hres))
+ return hres;
+ }
+
+ /* Next try in-process handler */
+ if (CLSCTX_INPROC_HANDLER & dwClsContext)
+ {
+ static const WCHAR wszInprocHandler32[] = {'I','n','p','r','o','c','H','a','n','d','l','e','r','3','2',0};
+ HKEY hkey;
+
+ hres = COM_OpenKeyForCLSID(rclsid, wszInprocHandler32, KEY_READ, &hkey);
+ if (FAILED(hres))
+ {
+ if (hres == REGDB_E_CLASSNOTREG)
+ ERR("class %s not registered\n", debugstr_guid(rclsid));
+ else
+ WARN("class %s not registered in-proc handler\n", debugstr_guid(rclsid));
}
if (SUCCEEDED(hres))
@@ -1652,6 +1679,9 @@ HRESULT WINAPI CoGetClassObject(
hres = E_NOINTERFACE;
}
+ if (FAILED(hres))
+ ERR("no class object %s could be created for for context 0x%lx\n",
+ debugstr_guid(rclsid), dwClsContext);
return hres;
}
More information about the wine-cvs
mailing list