OleSetAutoConvert

Andreas Mohr amohr at codeweavers.com
Fri Feb 2 14:37:35 CST 2001


Hi all,

take a stab at implementing OleSetAutoConvert
(shows as FIXME for Photoshop 5.5), and recode OleGetAutoConvert a bit.

Andreas Mohr
-------------- next part --------------
Determining best CVS host...
Using CVSROOT :pserver:cvs at wine.codeweavers.com:/home/cvs/wine
Index: dlls/ole32/compobj.c
===================================================================
RCS file: /home/cvs/wine/wine/dlls/ole32/compobj.c,v
retrieving revision 1.35
diff -u -r1.35 compobj.c
--- dlls/ole32/compobj.c	2001/01/17 22:03:19	1.35
+++ dlls/ole32/compobj.c	2001/02/03 02:14:05
@@ -1976,21 +1976,68 @@
  */
 HRESULT WINAPI OleGetAutoConvert(REFCLSID clsidOld, LPCLSID pClsidNew)
 {
-  HKEY	hkey;
-  char	buf[200];
-  WCHAR	wbuf[200];
-  DWORD	len;
-
-  sprintf(buf,"CLSID\\");WINE_StringFromCLSID(clsidOld,&buf[6]);
-  if (RegOpenKeyA(HKEY_CLASSES_ROOT,buf,&hkey))
-      return REGDB_E_CLASSNOTREG;
-  len = 200;
-  if (RegQueryValueA(hkey,"AutoConvertTo",buf,&len))
-      return REGDB_E_KEYMISSING;
-  RegCloseKey(hkey);
-  MultiByteToWideChar( CP_ACP, 0, buf, -1, wbuf, sizeof(wbuf)/sizeof(WCHAR) );
-  CLSIDFromString(wbuf,pClsidNew);
-  return S_OK;
+    HKEY hkey = 0;
+    char buf[200];
+    WCHAR wbuf[200];
+    DWORD len;
+    HRESULT res = S_OK;
+
+    sprintf(buf,"CLSID\\");WINE_StringFromCLSID(clsidOld,&buf[6]);
+    if (RegOpenKeyA(HKEY_CLASSES_ROOT,buf,&hkey))
+    {
+        res = REGDB_E_CLASSNOTREG;
+	goto done;
+    }
+    len = 200;
+    /* we can just query for the default value of AutoConvertTo key like that,
+       without opening the AutoConvertTo key and querying for NULL (default) */
+    if (RegQueryValueA(hkey,"AutoConvertTo",buf,&len))
+    {
+        res = REGDB_E_KEYMISSING;
+	goto done;
+    }
+    MultiByteToWideChar( CP_ACP, 0, buf, -1, wbuf, sizeof(wbuf)/sizeof(WCHAR) );
+    CLSIDFromString(wbuf,pClsidNew);
+done:
+  if (hkey) RegCloseKey(hkey);
+
+  return res;
+}
+
+/******************************************************************************
+ *              OleSetAutoConvert        [OLE32.126]
+ */
+HRESULT WINAPI OleSetAutoConvert(REFCLSID clsidOld, REFCLSID clsidNew)
+{
+    HKEY hkey = 0, hkeyConvert = 0;
+    char buf[200], szClsidNew[200];
+    HRESULT res = S_OK;
+
+    TRACE("(%p,%p);\n", clsidOld, clsidNew);
+    sprintf(buf,"CLSID\\");WINE_StringFromCLSID(clsidOld,&buf[6]);
+    WINE_StringFromCLSID(clsidNew, szClsidNew);
+    if (RegOpenKeyA(HKEY_CLASSES_ROOT,buf,&hkey))
+    {
+        res = REGDB_E_CLASSNOTREG;
+	goto done;
+    }
+    if (RegCreateKeyA(hkey, "AutoConvertTo", &hkeyConvert))
+    {
+        res = REGDB_E_WRITEREGDB;
+	goto done;
+    }
+    if (RegSetValueExA(hkeyConvert, NULL, 0,
+                            REG_SZ, (LPBYTE)szClsidNew, strlen(szClsidNew)+1))
+    {
+        res = REGDB_E_WRITEREGDB;
+	goto done;
+    }
+
+done:
+    if (hkeyConvert) RegCloseKey(hkeyConvert);
+    if (hkey) RegCloseKey(hkey);
+
+    return res;
 }
 
 /***********************************************************************
Index: dlls/ole32/ole2stubs.c
===================================================================
RCS file: /home/cvs/wine/wine/dlls/ole32/ole2stubs.c,v
retrieving revision 1.14
diff -u -r1.14 ole2stubs.c
--- dlls/ole32/ole2stubs.c	2000/12/01 23:58:29	1.14
+++ dlls/ole32/ole2stubs.c	2001/02/03 02:14:05
@@ -67,15 +67,6 @@
 }
 
 /******************************************************************************
- *              OleSetAutoConvert        [OLE32.@]
- */
-HRESULT WINAPI OleSetAutoConvert(REFCLSID clsidOld, REFCLSID clsidNew)
-{
-    FIXME("(%p,%p), stub!\n", clsidOld, clsidNew);
-    return S_OK;
-}
-
-/******************************************************************************
  *              IsAccelerator        [OLE32.75]
  */
 BOOL WINAPI IsAccelerator(HACCEL hAccel, int cAccelEntries, LPMSG lpMsg, WORD* lpwCmd)


More information about the wine-patches mailing list