[PATCH 3/5] combase: Move CreateErrorInfo() function.

Nikolay Sivov nsivov at codeweavers.com
Tue Aug 4 03:17:14 CDT 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/combase/Makefile.in  |   2 +
 dlls/combase/combase.spec |   2 +-
 dlls/combase/errorinfo.c  | 356 ++++++++++++++++++++++++++++++++++++++
 dlls/ole32/errorinfo.c    | 356 --------------------------------------
 dlls/ole32/ole32.spec     |   2 +-
 5 files changed, 360 insertions(+), 358 deletions(-)
 create mode 100644 dlls/combase/errorinfo.c

diff --git a/dlls/combase/Makefile.in b/dlls/combase/Makefile.in
index 954dc629973..83c71ce9493 100644
--- a/dlls/combase/Makefile.in
+++ b/dlls/combase/Makefile.in
@@ -1,10 +1,12 @@
 MODULE    = combase.dll
 IMPORTLIB = combase
 IMPORTS   = advapi32 ole32 user32 gdi32 uuid
+DELAYIMPORTS = oleaut32
 
 EXTRADLLFLAGS = -mno-cygwin
 
 C_SRCS = \
+	errorinfo.c \
 	roapi.c \
 	string.c \
 	usrmarshal.c
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
index f1aaa44205d..cb073ef2fcc 100644
--- a/dlls/combase/combase.spec
+++ b/dlls/combase/combase.spec
@@ -170,7 +170,7 @@
 @ stub CoVrfReleaseThreadState
 @ stdcall CoWaitForMultipleHandles(long long long ptr ptr) ole32.CoWaitForMultipleHandles
 @ stub CoWaitForMultipleObjects
-@ stdcall CreateErrorInfo(ptr) ole32.CreateErrorInfo
+@ stdcall CreateErrorInfo(ptr)
 @ stdcall CreateStreamOnHGlobal(ptr long ptr) ole32.CreateStreamOnHGlobal
 @ stub DcomChannelSetHResult
 @ stdcall DllDebugObjectRPCHook(long ptr) ole32.DllDebugObjectRPCHook
diff --git a/dlls/combase/errorinfo.c b/dlls/combase/errorinfo.c
new file mode 100644
index 00000000000..3fcc65a31e1
--- /dev/null
+++ b/dlls/combase/errorinfo.c
@@ -0,0 +1,356 @@
+/*
+ * ErrorInfo API
+ *
+ * Copyright 2000 Patrik Stridvall, Juergen Schmied
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+
+#include "oleauto.h"
+
+#include "wine/debug.h"
+#include "wine/heap.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(ole);
+
+static WCHAR *heap_strdupW(const WCHAR *str)
+{
+    WCHAR *ret = NULL;
+
+    if (str)
+    {
+        size_t size;
+
+        size = (lstrlenW(str)+1)*sizeof(WCHAR);
+        ret = heap_alloc(size);
+        if (ret)
+            memcpy(ret, str, size);
+    }
+
+    return ret;
+}
+
+struct error_info
+{
+    IErrorInfo IErrorInfo_iface;
+    ICreateErrorInfo ICreateErrorInfo_iface;
+    ISupportErrorInfo ISupportErrorInfo_iface;
+    LONG refcount;
+
+    GUID guid;
+    WCHAR *source;
+    WCHAR *description;
+    WCHAR *help_file;
+    DWORD help_context;
+};
+
+static struct error_info *impl_from_IErrorInfo(IErrorInfo *iface)
+{
+    return CONTAINING_RECORD(iface, struct error_info, IErrorInfo_iface);
+}
+
+static struct error_info *impl_from_ICreateErrorInfo(ICreateErrorInfo *iface)
+{
+    return CONTAINING_RECORD(iface, struct error_info, ICreateErrorInfo_iface);
+}
+
+static struct error_info *impl_from_ISupportErrorInfo(ISupportErrorInfo *iface)
+{
+    return CONTAINING_RECORD(iface, struct error_info, ISupportErrorInfo_iface);
+}
+
+static HRESULT WINAPI errorinfo_QueryInterface(IErrorInfo *iface, REFIID riid, void **obj)
+{
+    struct error_info *error_info = impl_from_IErrorInfo(iface);
+
+    TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
+
+    *obj = NULL;
+
+    if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IErrorInfo))
+    {
+        *obj = &error_info->IErrorInfo_iface;
+    }
+    else if (IsEqualIID(riid, &IID_ICreateErrorInfo))
+    {
+        *obj = &error_info->ICreateErrorInfo_iface;
+    }
+    else if (IsEqualIID(riid, &IID_ISupportErrorInfo))
+    {
+        *obj = &error_info->ISupportErrorInfo_iface;
+    }
+
+    if (*obj)
+    {
+        IUnknown_AddRef((IUnknown *)*obj);
+        return S_OK;
+    }
+
+    WARN("Unsupported interface %s.\n", debugstr_guid(riid));
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI errorinfo_AddRef(IErrorInfo *iface)
+{
+    struct error_info *error_info = impl_from_IErrorInfo(iface);
+    ULONG refcount = InterlockedIncrement(&error_info->refcount);
+
+    TRACE("%p, refcount %u.\n", iface, refcount);
+
+    return refcount;
+}
+
+static ULONG WINAPI errorinfo_Release(IErrorInfo *iface)
+{
+    struct error_info *error_info = impl_from_IErrorInfo(iface);
+    ULONG refcount = InterlockedDecrement(&error_info->refcount);
+
+    TRACE("%p, refcount %u.\n", iface, refcount);
+
+    if (!refcount)
+    {
+        heap_free(error_info->source);
+        heap_free(error_info->description);
+        heap_free(error_info->help_file);
+        heap_free(error_info);
+    }
+
+    return refcount;
+}
+
+static HRESULT WINAPI errorinfo_GetGUID(IErrorInfo *iface, GUID *guid)
+{
+    struct error_info *error_info = impl_from_IErrorInfo(iface);
+
+    TRACE("%p, %p.\n", iface, guid);
+
+    if (!guid) return E_INVALIDARG;
+    *guid = error_info->guid;
+    return S_OK;
+}
+
+static HRESULT WINAPI errorinfo_GetSource(IErrorInfo* iface, BSTR *source)
+{
+    struct error_info *error_info = impl_from_IErrorInfo(iface);
+
+    TRACE("%p, %p.\n", iface, source);
+
+    if (!source)
+        return E_INVALIDARG;
+    *source = SysAllocString(error_info->source);
+    return S_OK;
+}
+
+static HRESULT WINAPI errorinfo_GetDescription(IErrorInfo *iface, BSTR *description)
+{
+    struct error_info *error_info = impl_from_IErrorInfo(iface);
+
+    TRACE("%p, %p.\n", iface, description);
+
+    if (!description)
+        return E_INVALIDARG;
+    *description = SysAllocString(error_info->description);
+    return S_OK;
+}
+
+static HRESULT WINAPI errorinfo_GetHelpFile(IErrorInfo *iface, BSTR *helpfile)
+{
+    struct error_info *error_info = impl_from_IErrorInfo(iface);
+
+    TRACE("%p, %p.\n", iface, helpfile);
+
+    if (!helpfile)
+        return E_INVALIDARG;
+    *helpfile = SysAllocString(error_info->help_file);
+    return S_OK;
+}
+
+static HRESULT WINAPI errorinfo_GetHelpContext(IErrorInfo *iface, DWORD *help_context)
+{
+    struct error_info *error_info = impl_from_IErrorInfo(iface);
+
+    TRACE("%p, %p.\n", iface, help_context);
+
+    if (!help_context)
+        return E_INVALIDARG;
+    *help_context = error_info->help_context;
+
+    return S_OK;
+}
+
+static const IErrorInfoVtbl errorinfo_vtbl =
+{
+    errorinfo_QueryInterface,
+    errorinfo_AddRef,
+    errorinfo_Release,
+    errorinfo_GetGUID,
+    errorinfo_GetSource,
+    errorinfo_GetDescription,
+    errorinfo_GetHelpFile,
+    errorinfo_GetHelpContext
+};
+
+static HRESULT WINAPI create_errorinfo_QueryInterface(ICreateErrorInfo *iface, REFIID riid, void **obj)
+{
+    struct error_info *error_info = impl_from_ICreateErrorInfo(iface);
+    return IErrorInfo_QueryInterface(&error_info->IErrorInfo_iface, riid, obj);
+}
+
+static ULONG WINAPI create_errorinfo_AddRef(ICreateErrorInfo *iface)
+{
+    struct error_info *error_info = impl_from_ICreateErrorInfo(iface);
+    return IErrorInfo_AddRef(&error_info->IErrorInfo_iface);
+}
+
+static ULONG WINAPI create_errorinfo_Release(ICreateErrorInfo *iface)
+{
+    struct error_info *error_info = impl_from_ICreateErrorInfo(iface);
+    return IErrorInfo_Release(&error_info->IErrorInfo_iface);
+}
+
+static HRESULT WINAPI create_errorinfo_SetGUID(ICreateErrorInfo *iface, REFGUID guid)
+{
+    struct error_info *error_info = impl_from_ICreateErrorInfo(iface);
+
+    TRACE("%p, %s.\n", iface, debugstr_guid(guid));
+
+    error_info->guid = *guid;
+
+    return S_OK;
+}
+
+static HRESULT WINAPI create_errorinfo_SetSource(ICreateErrorInfo *iface, LPOLESTR source)
+{
+    struct error_info *error_info = impl_from_ICreateErrorInfo(iface);
+
+    TRACE("%p, %s.\n", iface, debugstr_w(source));
+
+    heap_free(error_info->source);
+    error_info->source = heap_strdupW(source);
+
+    return S_OK;
+}
+
+static HRESULT WINAPI create_errorinfo_SetDescription(ICreateErrorInfo *iface, LPOLESTR description)
+{
+    struct error_info *error_info = impl_from_ICreateErrorInfo(iface);
+
+    TRACE("%p, %s.\n", iface, debugstr_w(description));
+
+    heap_free(error_info->description);
+    error_info->description = heap_strdupW(description);
+
+    return S_OK;
+}
+
+static HRESULT WINAPI create_errorinfo_SetHelpFile(ICreateErrorInfo *iface, LPOLESTR helpfile)
+{
+    struct error_info *error_info = impl_from_ICreateErrorInfo(iface);
+
+    TRACE("%p, %s.\n", iface, debugstr_w(helpfile));
+
+    heap_free(error_info->help_file);
+    error_info->help_file = heap_strdupW(helpfile);
+
+    return S_OK;
+}
+
+static HRESULT WINAPI create_errorinfo_SetHelpContext(ICreateErrorInfo *iface, DWORD help_context)
+{
+    struct error_info *error_info = impl_from_ICreateErrorInfo(iface);
+
+    TRACE("%p, %#x.\n", iface, help_context);
+
+    error_info->help_context = help_context;
+
+    return S_OK;
+}
+
+static const ICreateErrorInfoVtbl create_errorinfo_vtbl =
+{
+    create_errorinfo_QueryInterface,
+    create_errorinfo_AddRef,
+    create_errorinfo_Release,
+    create_errorinfo_SetGUID,
+    create_errorinfo_SetSource,
+    create_errorinfo_SetDescription,
+    create_errorinfo_SetHelpFile,
+    create_errorinfo_SetHelpContext
+};
+
+static HRESULT WINAPI support_errorinfo_QueryInterface(ISupportErrorInfo *iface, REFIID riid, void **obj)
+{
+    struct error_info *error_info = impl_from_ISupportErrorInfo(iface);
+    return IErrorInfo_QueryInterface(&error_info->IErrorInfo_iface, riid, obj);
+}
+
+static ULONG WINAPI support_errorinfo_AddRef(ISupportErrorInfo *iface)
+{
+    struct error_info *error_info = impl_from_ISupportErrorInfo(iface);
+    return IErrorInfo_AddRef(&error_info->IErrorInfo_iface);
+}
+
+static ULONG WINAPI support_errorinfo_Release(ISupportErrorInfo *iface)
+{
+    struct error_info *error_info = impl_from_ISupportErrorInfo(iface);
+    return IErrorInfo_Release(&error_info->IErrorInfo_iface);
+}
+
+static HRESULT WINAPI support_errorinfo_InterfaceSupportsErrorInfo(ISupportErrorInfo *iface, REFIID riid)
+{
+    struct error_info *error_info = impl_from_ISupportErrorInfo(iface);
+
+    TRACE("%p, %s.\n", iface, debugstr_guid(riid));
+
+    return IsEqualIID(riid, &error_info->guid) ? S_OK : S_FALSE;
+}
+
+static const ISupportErrorInfoVtbl support_errorinfo_vtbl =
+{
+    support_errorinfo_QueryInterface,
+    support_errorinfo_AddRef,
+    support_errorinfo_Release,
+    support_errorinfo_InterfaceSupportsErrorInfo
+};
+
+/***********************************************************************
+ *                CreateErrorInfo (combase.@)
+ */
+HRESULT WINAPI CreateErrorInfo(ICreateErrorInfo **ret)
+{
+    struct error_info *error_info;
+
+    TRACE("%p.\n", ret);
+
+    if (!ret) return E_INVALIDARG;
+
+    if (!(error_info = heap_alloc(sizeof(*error_info))))
+        return E_OUTOFMEMORY;
+
+    error_info->IErrorInfo_iface.lpVtbl = &errorinfo_vtbl;
+    error_info->ICreateErrorInfo_iface.lpVtbl = &create_errorinfo_vtbl;
+    error_info->ISupportErrorInfo_iface.lpVtbl = &support_errorinfo_vtbl;
+    error_info->refcount = 1;
+    error_info->source = NULL;
+    error_info->description = NULL;
+    error_info->help_file = NULL;
+    error_info->help_context = 0;
+
+    *ret = &error_info->ICreateErrorInfo_iface;
+
+    return S_OK;
+}
diff --git a/dlls/ole32/errorinfo.c b/dlls/ole32/errorinfo.c
index 6aa3a336b8d..45591ba4a1f 100644
--- a/dlls/ole32/errorinfo.c
+++ b/dlls/ole32/errorinfo.c
@@ -40,362 +40,6 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(ole);
 
-static inline WCHAR *heap_strdupW(const WCHAR *str)
-{
-    WCHAR *ret = NULL;
-
-    if(str) {
-        size_t size;
-
-        size = (lstrlenW(str)+1)*sizeof(WCHAR);
-        ret = heap_alloc(size);
-        if(ret)
-            memcpy(ret, str, size);
-    }
-
-    return ret;
-}
-
-typedef struct ErrorInfoImpl
-{
-    IErrorInfo IErrorInfo_iface;
-    ICreateErrorInfo ICreateErrorInfo_iface;
-    ISupportErrorInfo ISupportErrorInfo_iface;
-    LONG ref;
-
-    GUID m_Guid;
-    WCHAR *source;
-    WCHAR *description;
-    WCHAR *help_file;
-    DWORD m_dwHelpContext;
-} ErrorInfoImpl;
-
-static inline ErrorInfoImpl *impl_from_IErrorInfo( IErrorInfo *iface )
-{
-    return CONTAINING_RECORD(iface, ErrorInfoImpl, IErrorInfo_iface);
-}
-
-static inline ErrorInfoImpl *impl_from_ICreateErrorInfo( ICreateErrorInfo *iface )
-{
-    return CONTAINING_RECORD(iface, ErrorInfoImpl, ICreateErrorInfo_iface);
-}
-
-static inline ErrorInfoImpl *impl_from_ISupportErrorInfo( ISupportErrorInfo *iface )
-{
-    return CONTAINING_RECORD(iface, ErrorInfoImpl, ISupportErrorInfo_iface);
-}
-
-static HRESULT WINAPI IErrorInfoImpl_QueryInterface(
-	IErrorInfo* iface,
-	REFIID     riid,
-	void**     ppvoid)
-{
-	ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
-	TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid),ppvoid);
-
-	*ppvoid = NULL;
-
-	if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IErrorInfo))
-	{
-	  *ppvoid = &This->IErrorInfo_iface;
-	}
-	else if(IsEqualIID(riid, &IID_ICreateErrorInfo))
-	{
-	  *ppvoid = &This->ICreateErrorInfo_iface;
-	}
-	else if(IsEqualIID(riid, &IID_ISupportErrorInfo))
-	{
-	  *ppvoid = &This->ISupportErrorInfo_iface;
-	}
-
-	if(*ppvoid)
-	{
-	  IUnknown_AddRef( (IUnknown*)*ppvoid );
-	  TRACE("-- Interface: (%p)->(%p)\n",ppvoid,*ppvoid);
-	  return S_OK;
-	}
-	TRACE("-- Interface: E_NOINTERFACE\n");
-	return E_NOINTERFACE;
-}
-
-static ULONG WINAPI IErrorInfoImpl_AddRef(
- 	IErrorInfo* iface)
-{
-	ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
-	TRACE("(%p)->(count=%u)\n",This,This->ref);
-	return InterlockedIncrement(&This->ref);
-}
-
-static ULONG WINAPI IErrorInfoImpl_Release(
-	IErrorInfo* iface)
-{
-	ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
-        ULONG ref = InterlockedDecrement(&This->ref);
-
-	TRACE("(%p)->(count=%u)\n",This,ref+1);
-
-	if (!ref)
-	{
-	  TRACE("-- destroying IErrorInfo(%p)\n",This);
-
-          heap_free(This->source);
-          heap_free(This->description);
-          heap_free(This->help_file);
-          heap_free(This);
-	}
-	return ref;
-}
-
-static HRESULT WINAPI IErrorInfoImpl_GetGUID(
-	IErrorInfo* iface,
-	GUID * pGUID)
-{
-	ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
-	TRACE("(%p)->(count=%u)\n",This,This->ref);
-	if(!pGUID )return E_INVALIDARG;
-	*pGUID = This->m_Guid;
-	return S_OK;
-}
-
-static HRESULT WINAPI IErrorInfoImpl_GetSource(
-	IErrorInfo* iface,
-	BSTR *pBstrSource)
-{
-	ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
-	TRACE("(%p)->(pBstrSource=%p)\n",This,pBstrSource);
-	if (pBstrSource == NULL)
-	    return E_INVALIDARG;
-	*pBstrSource = SysAllocString(This->source);
-	return S_OK;
-}
-
-static HRESULT WINAPI IErrorInfoImpl_GetDescription(
-	IErrorInfo* iface,
-	BSTR *pBstrDescription)
-{
-	ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
-
-	TRACE("(%p)->(pBstrDescription=%p)\n",This,pBstrDescription);
-	if (pBstrDescription == NULL)
-	    return E_INVALIDARG;
-	*pBstrDescription = SysAllocString(This->description);
-
-	return S_OK;
-}
-
-static HRESULT WINAPI IErrorInfoImpl_GetHelpFile(
-	IErrorInfo* iface,
-	BSTR *pBstrHelpFile)
-{
-	ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
-
-	TRACE("(%p)->(pBstrHelpFile=%p)\n",This, pBstrHelpFile);
-	if (pBstrHelpFile == NULL)
-	    return E_INVALIDARG;
-	*pBstrHelpFile = SysAllocString(This->help_file);
-
-	return S_OK;
-}
-
-static HRESULT WINAPI IErrorInfoImpl_GetHelpContext(
-	IErrorInfo* iface,
-	DWORD *pdwHelpContext)
-{
-	ErrorInfoImpl *This = impl_from_IErrorInfo(iface);
-	TRACE("(%p)->(pdwHelpContext=%p)\n",This, pdwHelpContext);
-	if (pdwHelpContext == NULL)
-	    return E_INVALIDARG;
-	*pdwHelpContext = This->m_dwHelpContext;
-
-	return S_OK;
-}
-
-static const IErrorInfoVtbl ErrorInfoVtbl =
-{
-  IErrorInfoImpl_QueryInterface,
-  IErrorInfoImpl_AddRef,
-  IErrorInfoImpl_Release,
-  IErrorInfoImpl_GetGUID,
-  IErrorInfoImpl_GetSource,
-  IErrorInfoImpl_GetDescription,
-  IErrorInfoImpl_GetHelpFile,
-  IErrorInfoImpl_GetHelpContext
-};
-
-
-static HRESULT WINAPI ICreateErrorInfoImpl_QueryInterface(
-	ICreateErrorInfo* iface,
-	REFIID     riid,
-	VOID**     ppvoid)
-{
-    ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
-    return IErrorInfo_QueryInterface(&This->IErrorInfo_iface, riid, ppvoid);
-}
-
-static ULONG WINAPI ICreateErrorInfoImpl_AddRef(
- 	ICreateErrorInfo* iface)
-{
-    ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
-    return IErrorInfo_AddRef(&This->IErrorInfo_iface);
-}
-
-static ULONG WINAPI ICreateErrorInfoImpl_Release(
-	ICreateErrorInfo* iface)
-{
-    ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
-    return IErrorInfo_Release(&This->IErrorInfo_iface);
-}
-
-
-static HRESULT WINAPI ICreateErrorInfoImpl_SetGUID(
-	ICreateErrorInfo* iface,
-	REFGUID rguid)
-{
-	ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
-	TRACE("(%p)->(%s)\n", This, debugstr_guid(rguid));
-	This->m_Guid = *rguid;
-	return S_OK;
-}
-
-static HRESULT WINAPI ICreateErrorInfoImpl_SetSource(
-	ICreateErrorInfo* iface,
-	LPOLESTR szSource)
-{
-	ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
-	TRACE("(%p): %s\n",This, debugstr_w(szSource));
-
-	heap_free(This->source);
-	This->source = heap_strdupW(szSource);
-
-	return S_OK;
-}
-
-static HRESULT WINAPI ICreateErrorInfoImpl_SetDescription(
-	ICreateErrorInfo* iface,
-	LPOLESTR szDescription)
-{
-	ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
-	TRACE("(%p): %s\n",This, debugstr_w(szDescription));
-
-	heap_free(This->description);
-	This->description = heap_strdupW(szDescription);
-	return S_OK;
-}
-
-static HRESULT WINAPI ICreateErrorInfoImpl_SetHelpFile(
-	ICreateErrorInfo* iface,
-	LPOLESTR szHelpFile)
-{
-	ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
-	TRACE("(%p,%s)\n",This,debugstr_w(szHelpFile));
-	heap_free(This->help_file);
-	This->help_file = heap_strdupW(szHelpFile);
-	return S_OK;
-}
-
-static HRESULT WINAPI ICreateErrorInfoImpl_SetHelpContext(
-	ICreateErrorInfo* iface,
- 	DWORD dwHelpContext)
-{
-	ErrorInfoImpl *This = impl_from_ICreateErrorInfo(iface);
-	TRACE("(%p,%d)\n",This,dwHelpContext);
-	This->m_dwHelpContext = dwHelpContext;
-	return S_OK;
-}
-
-static const ICreateErrorInfoVtbl CreateErrorInfoVtbl =
-{
-  ICreateErrorInfoImpl_QueryInterface,
-  ICreateErrorInfoImpl_AddRef,
-  ICreateErrorInfoImpl_Release,
-  ICreateErrorInfoImpl_SetGUID,
-  ICreateErrorInfoImpl_SetSource,
-  ICreateErrorInfoImpl_SetDescription,
-  ICreateErrorInfoImpl_SetHelpFile,
-  ICreateErrorInfoImpl_SetHelpContext
-};
-
-static HRESULT WINAPI ISupportErrorInfoImpl_QueryInterface(
-	ISupportErrorInfo* iface,
-	REFIID     riid,
-	VOID**     ppvoid)
-{
-    ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface);
-    return IErrorInfo_QueryInterface(&This->IErrorInfo_iface, riid, ppvoid);
-}
-
-static ULONG WINAPI ISupportErrorInfoImpl_AddRef(ISupportErrorInfo* iface)
-{
-    ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface);
-    return IErrorInfo_AddRef(&This->IErrorInfo_iface);
-}
-
-static ULONG WINAPI ISupportErrorInfoImpl_Release(ISupportErrorInfo* iface)
-{
-    ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface);
-    return IErrorInfo_Release(&This->IErrorInfo_iface);
-}
-
-static HRESULT WINAPI ISupportErrorInfoImpl_InterfaceSupportsErrorInfo(
-	ISupportErrorInfo* iface,
-	REFIID riid)
-{
-	ErrorInfoImpl *This = impl_from_ISupportErrorInfo(iface);
-	TRACE("(%p)->(%s)\n", This, debugstr_guid(riid));
-	return (IsEqualIID(riid, &This->m_Guid)) ? S_OK : S_FALSE;
-}
-
-static const ISupportErrorInfoVtbl SupportErrorInfoVtbl =
-{
-  ISupportErrorInfoImpl_QueryInterface,
-  ISupportErrorInfoImpl_AddRef,
-  ISupportErrorInfoImpl_Release,
-  ISupportErrorInfoImpl_InterfaceSupportsErrorInfo
-};
-
-static IErrorInfo* IErrorInfoImpl_Constructor(void)
-{
-    ErrorInfoImpl *This = heap_alloc(sizeof(ErrorInfoImpl));
-
-    if (!This) return NULL;
-
-    This->IErrorInfo_iface.lpVtbl = &ErrorInfoVtbl;
-    This->ICreateErrorInfo_iface.lpVtbl = &CreateErrorInfoVtbl;
-    This->ISupportErrorInfo_iface.lpVtbl = &SupportErrorInfoVtbl;
-    This->ref = 1;
-    This->source = NULL;
-    This->description = NULL;
-    This->help_file = NULL;
-    This->m_dwHelpContext = 0;
-
-    return &This->IErrorInfo_iface;
-}
-
-/***********************************************************************
- *		CreateErrorInfo (OLE32.@)
- *
- * Creates an object used to set details for an error info object.
- *
- * PARAMS
- *  pperrinfo [O]. Address where error info creation object will be stored.
- *
- * RETURNS
- *  Success: S_OK.
- *  Failure: HRESULT code.
- */
-HRESULT WINAPI CreateErrorInfo(ICreateErrorInfo **pperrinfo)
-{
-	IErrorInfo * pei;
-	HRESULT res;
-	TRACE("(%p)\n", pperrinfo);
-	if(! pperrinfo ) return E_INVALIDARG;
-	if(!(pei=IErrorInfoImpl_Constructor()))return E_OUTOFMEMORY;
-
-	res = IErrorInfo_QueryInterface(pei, &IID_ICreateErrorInfo, (LPVOID*)pperrinfo);
-	IErrorInfo_Release(pei);
-	return res;
-}
-
 /***********************************************************************
  *		GetErrorInfo (OLE32.@)
  *
diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec
index 9a6ec7cb719..927a98ea123 100644
--- a/dlls/ole32/ole32.spec
+++ b/dlls/ole32/ole32.spec
@@ -97,7 +97,7 @@
 @ stdcall CreateClassMoniker(ptr ptr)
 @ stdcall CreateDataAdviseHolder(ptr)
 @ stdcall CreateDataCache(ptr ptr ptr ptr)
-@ stdcall CreateErrorInfo(ptr)
+@ stdcall CreateErrorInfo(ptr) combase.CreateErrorInfo
 @ stdcall CreateFileMoniker(wstr ptr)
 @ stdcall CreateGenericComposite(ptr ptr ptr)
 @ stdcall CreateILockBytesOnHGlobal(ptr long ptr)
-- 
2.27.0




More information about the wine-devel mailing list