[v3 PATCH 3/5] combase: Move CreateErrorInfo() function.
Nikolay Sivov
nsivov at codeweavers.com
Tue Aug 4 09:02:38 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