From ec85c6be75ba253638184a39922ea27c3c51a260 Mon Sep 17 00:00:00 2001 From: Juergen Schmied <juergen.schmied@debitel.net> Date: Thu, 3 Aug 2000 04:34:59 +0000 Subject: [PATCH] Implemented the ErrorInfo interfaces. --- dlls/ole32/errorinfo.c | 519 ++++++++++++++++++++++++++++++++++- include/oleauto.h | 2 + include/oleidl.h | 1 + include/thread.h | 2 +- include/wine/obj_errorinfo.h | 115 ++++++++ include/wine/obj_oleaut.h | 12 - 6 files changed, 627 insertions(+), 24 deletions(-) create mode 100644 include/wine/obj_errorinfo.h diff --git a/dlls/ole32/errorinfo.c b/dlls/ole32/errorinfo.c index ce6ab81be25..eaa8c7489eb 100644 --- a/dlls/ole32/errorinfo.c +++ b/dlls/ole32/errorinfo.c @@ -1,7 +1,7 @@ /* * ErrorInfo API * - * Copyright 2000 Patrik Stridvall + * Copyright 2000 Patrik Stridvall, Juergen Schmied * * * The errorinfo is a per-thread object. The reference is stored in the @@ -9,20 +9,504 @@ */ #include "debugtools.h" -#include "oleauto.h" #include "windef.h" +#include "heap.h" #include "winerror.h" +#include "thread.h" +#include "debugtools.h" +#include "wine/obj_errorinfo.h" DEFAULT_DEBUG_CHANNEL(ole) +typedef struct ErrorInfoImpl +{ + ICOM_VTABLE(IErrorInfo) *lpvtei; + ICOM_VTABLE(ICreateErrorInfo) *lpvtcei; + ICOM_VTABLE(ISupportErrorInfo) *lpvtsei; + DWORD ref; + + const GUID *pGuid; +} ErrorInfoImpl; + +static ICOM_VTABLE(IErrorInfo) IErrorInfoImpl_VTable; +static ICOM_VTABLE(ICreateErrorInfo) ICreateErrorInfoImpl_VTable; +static ICOM_VTABLE(ISupportErrorInfo) ISupportErrorInfoImpl_VTable; + +/* + converts a objectpointer to This + */ +#define _IErrorInfo_Offset ((int)(&(((ErrorInfoImpl*)0)->lpvtei))) +#define _ICOM_THIS_From_IErrorInfo(class, name) class* This = (class*)(((char*)name)-_IErrorInfo_Offset); + +#define _ICreateErrorInfo_Offset ((int)(&(((ErrorInfoImpl*)0)->lpvtcei))) +#define _ICOM_THIS_From_ICreateErrorInfo(class, name) class* This = (class*)(((char*)name)-_ICreateErrorInfo_Offset); + +#define _ISupportErrorInfo_Offset ((int)(&(((ErrorInfoImpl*)0)->lpvtsei))) +#define _ICOM_THIS_From_ISupportErrorInfo(class, name) class* This = (class*)(((char*)name)-_ISupportErrorInfo_Offset); + +/* + converts This to a objectpointer + */ +#define _IErrorInfo_(This) (IErrorInfo*)&(This->lpvtei) +#define _ICreateErrorInfo_(This) (ICreateErrorInfo*)&(This->lpvtcei) +#define _ISupportErrorInfo_(This) (ISupportErrorInfo*)&(This->lpvtsei) + +IErrorInfo * IErrorInfoImpl_Constructor() +{ + ErrorInfoImpl * ei = HeapAlloc(GetProcessHeap(), 0, sizeof(ErrorInfoImpl)); + if (ei) + { + ei->lpvtei = &IErrorInfoImpl_VTable; + ei->lpvtcei = &ICreateErrorInfoImpl_VTable; + ei->lpvtsei = &ISupportErrorInfoImpl_VTable; + ei->ref = 1; + } + return (IErrorInfo *)ei; +} + + +static HRESULT WINAPI IErrorInfoImpl_QueryInterface( + IErrorInfo* iface, + REFIID riid, + VOID** ppvoid) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvoid); + + *ppvoid = NULL; + + if(IsEqualIID(riid, &IID_IErrorInfo)) + { + *ppvoid = _IErrorInfo_(This); + } + else if(IsEqualIID(riid, &IID_ICreateErrorInfo)) + { + *ppvoid = _ICreateErrorInfo_(This); + } + else if(IsEqualIID(riid, &IID_ISupportErrorInfo)) + { + *ppvoid = _ISupportErrorInfo_(This); + } + + 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) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)->(count=%lu)\n",This,This->ref); + return InterlockedIncrement(&This->ref); +} + +static ULONG WINAPI IErrorInfoImpl_Release( + IErrorInfo* iface) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)->(count=%lu)\n",This,This->ref); + + if (!InterlockedDecrement(&This->ref)) + { + TRACE("-- destroying IErrorInfo(%p)\n",This); + HeapFree(GetProcessHeap(),0,This); + return 0; + } + return This->ref; +} + +static HRESULT WINAPI IErrorInfoImpl_GetTypeInfoCount( + IErrorInfo* iface, + unsigned int* pctinfo) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IErrorInfoImpl_GetTypeInfo( + IErrorInfo* iface, + UINT iTInfo, + LCID lcid, + ITypeInfo** ppTInfo) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IErrorInfoImpl_GetIDsOfNames( + IErrorInfo* iface, + REFIID riid, + LPOLESTR* rgszNames, + UINT cNames, + LCID lcid, + DISPID* rgDispId) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IErrorInfoImpl_Invoke( + IErrorInfo* iface, + DISPID dispIdMember, + REFIID riid, + LCID lcid, + WORD wFlags, + DISPPARAMS* pDispParams, + VARIANT* pVarResult, + EXCEPINFO* pExepInfo, + UINT* puArgErr) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +/* FIXME: is this OK? Original is GUID* pGUID! This can't work! (js) */ +static HRESULT WINAPI IErrorInfoImpl_GetGUID( + IErrorInfo* iface, + GUID const ** pGUID) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p) check function prototype\n", This); + + if(!pGUID || !*pGUID)return E_INVALIDARG; + *pGUID = This->pGuid; + return S_OK; +} + +static HRESULT WINAPI IErrorInfoImpl_GetSource( + IErrorInfo* iface, + BSTR *pBstrSource) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IErrorInfoImpl_GetDescription( + IErrorInfo* iface, + BSTR *pBstrDescription) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IErrorInfoImpl_GetHelpFile( + IErrorInfo* iface, + BSTR *pBstrHelpFile) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI IErrorInfoImpl_GetHelpContext( + IErrorInfo* iface, + DWORD *pdwHelpContext) +{ + _ICOM_THIS_From_IErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static ICOM_VTABLE(IErrorInfo) IErrorInfoImpl_VTable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IErrorInfoImpl_QueryInterface, + IErrorInfoImpl_AddRef, + IErrorInfoImpl_Release, + IErrorInfoImpl_GetTypeInfoCount, + IErrorInfoImpl_GetTypeInfo, + IErrorInfoImpl_GetIDsOfNames, + IErrorInfoImpl_Invoke, + + IErrorInfoImpl_GetGUID, + IErrorInfoImpl_GetSource, + IErrorInfoImpl_GetDescription, + IErrorInfoImpl_GetHelpFile, + IErrorInfoImpl_GetHelpContext +}; + + +static HRESULT WINAPI ICreateErrorInfoImpl_QueryInterface( + ICreateErrorInfo* iface, + REFIID riid, + VOID** ppvoid) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_QueryInterface(_IErrorInfo_(This), riid, ppvoid); +} + +static ULONG WINAPI ICreateErrorInfoImpl_AddRef( + ICreateErrorInfo* iface) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_AddRef(_IErrorInfo_(This)); +} + +static ULONG WINAPI ICreateErrorInfoImpl_Release( + ICreateErrorInfo* iface) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_Release(_IErrorInfo_(This)); +} + +static HRESULT WINAPI ICreateErrorInfoImpl_GetTypeInfoCount( + ICreateErrorInfo* iface, + unsigned int* pctinfo) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_GetTypeInfoCount(_IErrorInfo_(This), pctinfo); +} + +static HRESULT WINAPI ICreateErrorInfoImpl_GetTypeInfo( + ICreateErrorInfo* iface, + UINT iTInfo, + LCID lcid, + ITypeInfo** ppTInfo) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_GetTypeInfo(_IErrorInfo_(This),iTInfo,lcid,ppTInfo); +} + +static HRESULT WINAPI ICreateErrorInfoImpl_GetIDsOfNames( + ICreateErrorInfo* iface, + REFIID riid, + LPOLESTR* rgszNames, + UINT cNames, + LCID lcid, + DISPID* rgDispId) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_GetIDsOfNames(_IErrorInfo_(This),riid,rgszNames,cNames,lcid,rgDispId); +} + +static HRESULT WINAPI ICreateErrorInfoImpl_Invoke( + ICreateErrorInfo* iface, + DISPID dispIdMember, + REFIID riid, + LCID lcid, + WORD wFlags, + DISPPARAMS* pDispParams, + VARIANT* pVarResult, + EXCEPINFO* pExepInfo, + UINT* puArgErr) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_Invoke(_IErrorInfo_(This),dispIdMember,riid,lcid,wFlags,pDispParams, + pVarResult,pExepInfo,puArgErr); +} + +static HRESULT WINAPI ICreateErrorInfoImpl_SetGUID( + ICreateErrorInfo* iface, + REFGUID rguid) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)->(%s)\n", This, debugstr_guid(rguid)); + This->pGuid = rguid; + return S_OK; +} + +static HRESULT WINAPI ICreateErrorInfoImpl_SetSource( + ICreateErrorInfo* iface, + LPOLESTR szSource) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI ICreateErrorInfoImpl_SetDescription( + ICreateErrorInfo* iface, + LPOLESTR szDescription) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI ICreateErrorInfoImpl_SetHelpFile( + ICreateErrorInfo* iface, + LPOLESTR szHelpFile) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI ICreateErrorInfoImpl_SetHelpContext( + ICreateErrorInfo* iface, + DWORD dwHelpContext) +{ + _ICOM_THIS_From_ICreateErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return E_NOTIMPL; +} + +static ICOM_VTABLE(ICreateErrorInfo) ICreateErrorInfoImpl_VTable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ICreateErrorInfoImpl_QueryInterface, + ICreateErrorInfoImpl_AddRef, + ICreateErrorInfoImpl_Release, + + ICreateErrorInfoImpl_GetTypeInfoCount, + ICreateErrorInfoImpl_GetTypeInfo, + ICreateErrorInfoImpl_GetIDsOfNames, + ICreateErrorInfoImpl_Invoke, + + ICreateErrorInfoImpl_SetGUID, + ICreateErrorInfoImpl_SetSource, + ICreateErrorInfoImpl_SetDescription, + ICreateErrorInfoImpl_SetHelpFile, + ICreateErrorInfoImpl_SetHelpContext +}; + +static HRESULT WINAPI ISupportErrorInfoImpl_QueryInterface( + ISupportErrorInfo* iface, + REFIID riid, + VOID** ppvoid) +{ + _ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface); + FIXME("(%p)\n", This); + + return IErrorInfo_QueryInterface(_IErrorInfo_(This), riid, ppvoid); +} + +static ULONG WINAPI ISupportErrorInfoImpl_AddRef( + ISupportErrorInfo* iface) +{ + _ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_AddRef(_IErrorInfo_(This)); +} + +static ULONG WINAPI ISupportErrorInfoImpl_Release( + ISupportErrorInfo* iface) +{ + _ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_Release(_IErrorInfo_(This)); +} + +static HRESULT WINAPI ISupportErrorInfoImpl_GetTypeInfoCount( + ISupportErrorInfo* iface, + unsigned int* pctinfo) +{ + _ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_GetTypeInfoCount(_IErrorInfo_(This), pctinfo); +} + +static HRESULT WINAPI ISupportErrorInfoImpl_GetTypeInfo( + ISupportErrorInfo* iface, + UINT iTInfo, + LCID lcid, + ITypeInfo** ppTInfo) +{ + _ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_GetTypeInfo(_IErrorInfo_(This),iTInfo,lcid,ppTInfo); +} + +static HRESULT WINAPI ISupportErrorInfoImpl_GetIDsOfNames( + ISupportErrorInfo* iface, + REFIID riid, + LPOLESTR* rgszNames, + UINT cNames, + LCID lcid, + DISPID* rgDispId) +{ + _ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_GetIDsOfNames(_IErrorInfo_(This),riid,rgszNames,cNames,lcid,rgDispId); +} + +static HRESULT WINAPI ISupportErrorInfoImpl_Invoke( + ISupportErrorInfo* iface, + DISPID dispIdMember, + REFIID riid, + LCID lcid, + WORD wFlags, + DISPPARAMS* pDispParams, + VARIANT* pVarResult, + EXCEPINFO* pExepInfo, + UINT* puArgErr) +{ + _ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)\n", This); + return IErrorInfo_Invoke(_IErrorInfo_(This),dispIdMember,riid,lcid,wFlags,pDispParams, + pVarResult,pExepInfo,puArgErr); +} + +static HRESULT WINAPI ISupportErrorInfoImpl_InterfaceSupportsErrorInfo( + ISupportErrorInfo* iface, + REFIID riid) +{ + _ICOM_THIS_From_ISupportErrorInfo(ErrorInfoImpl, iface); + TRACE("(%p)->(%s)\n", This, debugstr_guid(riid)); + return (riid == This->pGuid) ? S_OK : S_FALSE; +} + +static ICOM_VTABLE(ISupportErrorInfo) ISupportErrorInfoImpl_VTable = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ISupportErrorInfoImpl_QueryInterface, + ISupportErrorInfoImpl_AddRef, + ISupportErrorInfoImpl_Release, + + ISupportErrorInfoImpl_GetTypeInfoCount, + ISupportErrorInfoImpl_GetTypeInfo, + ISupportErrorInfoImpl_GetIDsOfNames, + ISupportErrorInfoImpl_Invoke, + + ISupportErrorInfoImpl_InterfaceSupportsErrorInfo +}; /*********************************************************************** * CreateErrorInfo */ HRESULT WINAPI CreateErrorInfo(ICreateErrorInfo **pperrinfo) { - FIXME("(%p): stub:\n", pperrinfo); - - return S_OK; + IErrorInfo * pei; + HRESULT res; + + TRACE("(%p): stub:\n", pperrinfo); + + if(! pperrinfo || !*pperrinfo) return E_INVALIDARG; + if(!(pei=IErrorInfoImpl_Constructor()))return E_OUTOFMEMORY; + + res = IErrorInfo_QueryInterface(pei, &IID_ICreateErrorInfo, (LPVOID*)pperrinfo); + IErrorInfo_Release(pei); + return res; } /*********************************************************************** @@ -30,9 +514,14 @@ HRESULT WINAPI CreateErrorInfo(ICreateErrorInfo **pperrinfo) */ HRESULT WINAPI GetErrorInfo(ULONG dwReserved, IErrorInfo **pperrinfo) { - FIXME("(%ld, %p): stub:\n", dwReserved, pperrinfo); - - return S_OK; + TRACE("(%ld, %p): stub:\n", dwReserved, pperrinfo); + + if(! pperrinfo || !*pperrinfo) return E_INVALIDARG; + if(!(*pperrinfo = (IErrorInfo*)(NtCurrentTeb()->ErrorInfo))) return S_FALSE; + + /* clear thread error state */ + NtCurrentTeb()->ErrorInfo = NULL; + return S_OK; } /*********************************************************************** @@ -40,7 +529,15 @@ HRESULT WINAPI GetErrorInfo(ULONG dwReserved, IErrorInfo **pperrinfo) */ HRESULT WINAPI SetErrorInfo(ULONG dwReserved, IErrorInfo *perrinfo) { - FIXME("(%ld, %p): stub:\n", dwReserved, perrinfo); - - return S_OK; + IErrorInfo * pei; + TRACE("(%ld, %p): stub:\n", dwReserved, perrinfo); + + /* release old errorinfo */ + pei = (IErrorInfo*)NtCurrentTeb()->ErrorInfo; + if(pei) IErrorInfo_Release(pei); + + /* set to new value */ + NtCurrentTeb()->ErrorInfo = perrinfo; + if(perrinfo) IErrorInfo_AddRef(perrinfo); + return S_OK; } diff --git a/include/oleauto.h b/include/oleauto.h index eb2334ffdc9..f7877d13f78 100644 --- a/include/oleauto.h +++ b/include/oleauto.h @@ -3,6 +3,8 @@ #include "wtypes.h" #include "wine/obj_oleaut.h" +#include "wine/obj_errorinfo.h" + #ifndef __WINE__ #include "oaidl.h" #endif diff --git a/include/oleidl.h b/include/oleidl.h index 34b4865faf6..6abc662558c 100644 --- a/include/oleidl.h +++ b/include/oleidl.h @@ -20,6 +20,7 @@ #include "wine/obj_cache.h" #include "wine/obj_oleobj.h" #include "wine/obj_oleview.h" +#include "wine/obj_errorinfo.h" #endif /* __WINE_OLEIDL_H */ diff --git a/include/thread.h b/include/thread.h index f04068646bf..c1200250f61 100644 --- a/include/thread.h +++ b/include/thread.h @@ -107,7 +107,7 @@ typedef struct _TEB DWORD pad8[3]; /* --n f10 */ PVOID ReservedForNtRpc; /* -2- f1c used by rpcrt4 */ DWORD pad9[24]; /* --n f20 */ - PVOID ReservedForOle; /* -2- f80 used by ole32 (IErrorInfo*) */ + PVOID ErrorInfo; /* -2- f80 used by ole32 (IErrorInfo*) */ } TEB; /* Thread exception flags */ diff --git a/include/wine/obj_errorinfo.h b/include/wine/obj_errorinfo.h new file mode 100644 index 00000000000..59bc25ddc75 --- /dev/null +++ b/include/wine/obj_errorinfo.h @@ -0,0 +1,115 @@ +/* + * Defines the COM interfaces and APIs related to ErrorInfo + */ + +#ifndef __WINE_WINE_OBJ_ERRORINFO_H +#define __WINE_WINE_OBJ_ERRORINFO_H + +#include "wine/obj_base.h" +#include "wine/obj_oleaut.h" + +DEFINE_GUID(IID_IErrorInfo,0x1CF2B120,0x547D,0x101B,0x8E,0x65,0x08,0x00,0x2B,0x2B,0xD1,0x19); +typedef struct IErrorInfo IErrorInfo,*LPERRORINFO; + +DEFINE_GUID(IID_ICreateErrorInfo,0x22F03340,0x547D,0x101B,0x8E,0x65,0x08,0x00,0x2B,0x2B,0xD1,0x19); +typedef struct ICreateErrorInfo ICreateErrorInfo,*LPCREATEERRORINFO; + +DEFINE_GUID(IID_ISupportErrorInfo,0xDF0B3D60,0x547D,0x101B,0x8E,0x65,0x08,0x00,0x2B,0x2B,0xD1,0x19); +typedef struct ISupportErrorInfo ISupportErrorInfo,*LPSUPPORTERRORINFO; + +/***************************************************************************** + * IErrorInfo + */ +#define ICOM_INTERFACE IErrorInfo +#define IErrorInfo_METHODS \ + ICOM_METHOD1(HRESULT, GetGUID, const GUID ** , pGUID) \ + ICOM_METHOD1(HRESULT, GetSource, BSTR* ,pBstrSource) \ + ICOM_METHOD1(HRESULT, GetDescription, BSTR*, pBstrDescription) \ + ICOM_METHOD1(HRESULT, GetHelpFile, BSTR*, pBstrHelpFile) \ + ICOM_METHOD1(HRESULT, GetHelpContext, DWORD*, pdwHelpContext) +#define IErrorInfo_IMETHODS \ + IUnknown_IMETHODS \ + IDispatch_IMETHODS \ + IErrorInfo_METHODS + +ICOM_DEFINE(IErrorInfo, IDispatch) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IErrorInfo_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IErrorInfo_AddRef(p) ICOM_CALL (AddRef,p) +#define IErrorInfo_Release(p) ICOM_CALL (Release,p) +/*** IDispatch methods ***/ +#define IErrorInfo_GetTypeInfoCount(p,a) ICOM_CALL1 (GetTypeInfoCount,p,a) +#define IErrorInfo_GetTypeInfo(p,a,b,c) ICOM_CALL3 (GetTypeInfo,p,a,b,c) +#define IErrorInfo_GetIDsOfNames(p,a,b,c,d,e) ICOM_CALL5 (GetIDsOfNames,p,a,b,c,d,e) +#define IErrorInfo_Invoke(p,a,b,c,d,e,f,g,h) ICOM_CALL8 (Invoke,p,a,b,c,d,e,f,g,h) +/*** IErrorInfo methods ***/ +#define IErrorInfo_GetGUID(p,a) ICOM_CALL1 (GetGUID,p,a) +#define IErrorInfo_GetSource(p,a) ICOM_CALL1 (GetSource,p,a) +#define IErrorInfo_GetDescription(p,a) ICOM_CALL1 (GetDescription,p,a) +#define IErrorInfo_GetHelpFile(p,a) ICOM_CALL1 (GetHelpFile,p,a) +#define IErrorInfo_GetHelpContext(p,a) ICOM_CALL1 (GetHelpContext,p,a) + +/***************************************************************************** + * ICreateErrorInfo + */ +#define ICOM_INTERFACE ICreateErrorInfo +#define ICreateErrorInfo_METHODS \ + ICOM_METHOD1(HRESULT, SetGUID, REFGUID, rguid) \ + ICOM_METHOD1(HRESULT, SetSource, LPOLESTR, szSource) \ + ICOM_METHOD1(HRESULT, SetDescription, LPOLESTR, szDescription) \ + ICOM_METHOD1(HRESULT, SetHelpFile, LPOLESTR, szHelpFile) \ + ICOM_METHOD1(HRESULT, SetHelpContext, DWORD, dwHelpContext) +#define ICreateErrorInfo_IMETHODS \ + IUnknown_IMETHODS \ + IDispatch_IMETHODS \ + ICreateErrorInfo_METHODS + +ICOM_DEFINE(ICreateErrorInfo, IDispatch) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define ICreateErrorInfo_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define ICreateErrorInfo_AddRef(p) ICOM_CALL (AddRef,p) +#define ICreateErrorInfo_Release(p) ICOM_CALL (Release,p) +/*** ICreateErrorInfo methods ***/ +#define ICreateErrorInfo_GetTypeInfoCount(p,a) ICOM_CALL1 (GetTypeInfoCount,p,a) +#define ICreateErrorInfo_GetTypeInfo(p,a,b,c) ICOM_CALL3 (GetTypeInfo,p,a,b,c) +#define ICreateErrorInfo_GetIDsOfNames(p,a,b,c,d,e) ICOM_CALL5 (GetIDsOfNames,p,a,b,c,d,e) +#define ICreateErrorInfo_Invoke(p,a,b,c,d,e,f,g,h) ICOM_CALL8 (Invoke,p,a,b,c,d,e,f,g,h) +/*** ICreateErrorInfo methods ***/ +#define ICreateErrorInfo_SetGUID(p,a) ICOM_CALL1 (SetGUID,p,a) +#define ICreateErrorInfo_SetSource(p,a) ICOM_CALL1 (SetSource,p,a) +#define ICreateErrorInfo_SetDescription(p,a) ICOM_CALL1 (SetDescription,p,a) +#define ICreateErrorInfo_SetHelpFile(p,a) ICOM_CALL1 (SetHelpFile,p,a) +#define ICreateErrorInfo_SetHelpContext(p,a) ICOM_CALL1 (SetHelpContext,p,a) + +/***************************************************************************** + * ISupportErrorInfo + */ +#define ICOM_INTERFACE ISupportErrorInfo +#define ISupportErrorInfo_METHODS \ + ICOM_METHOD1(HRESULT, InterfaceSupportsErrorInfo, REFIID, riid ) +#define ISupportErrorInfo_IMETHODS \ + IUnknown_IMETHODS \ + IDispatch_IMETHODS \ + ISupportErrorInfo_METHODS + +ICOM_DEFINE(ISupportErrorInfo, IDispatch) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define ISupportErrorInfo_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define ISupportErrorInfo_AddRef(p) ICOM_CALL (AddRef,p) +#define ISupportErrorInfo_Release(p) ICOM_CALL (Release,p) +/*** ISupportErrorInfo methods ***/ +#define ISupportErrorInfo_GetTypeInfoCount(p,a) ICOM_CALL1 (GetTypeInfoCount,p,a) +#define ISupportErrorInfo_GetTypeInfo(p,a,b,c) ICOM_CALL3 (GetTypeInfo,p,a,b,c) +#define ISupportErrorInfo_GetIDsOfNames(p,a,b,c,d,e) ICOM_CALL5 (GetIDsOfNames,p,a,b,c,d,e) +#define ISupportErrorInfo_Invoke(p,a,b,c,d,e,f,g,h) ICOM_CALL8 (Invoke,p,a,b,c,d,e,f,g,h) +/*** ISupportErrorInfo methods ***/ +#define ISupportErrorInfo_InterfaceSupportsErrorInfo(p,a) ICOM_CALL1 (InterfaceSupportsErrorInfo,p,a) + + +#endif /* __WINE_WINE_OBJ_ERRORINFO_H */ diff --git a/include/wine/obj_oleaut.h b/include/wine/obj_oleaut.h index 5ebca28c656..87c296dcd99 100644 --- a/include/wine/obj_oleaut.h +++ b/include/wine/obj_oleaut.h @@ -46,18 +46,6 @@ typedef struct ITypeLib2 ITypeLib2,*LPTYPELIB2; DEFINE_OLEGUID(IID_ITypeInfo2, 0x00020412,0,0); typedef struct ITypeInfo2 ITypeInfo2,*LPTYPEINFO2; -DEFINE_GUID(IID_IErrorInfo, 0x1CF2B120,0x547D,0x101B,0x8E,0x65, - 0x08,0x00, 0x2B,0x2B,0xD1,0x19); -typedef struct IErrorInfo IErrorInfo,*LPERRORINFO; - -DEFINE_GUID(IID_ICreateErrorInfo, 0x22F03340,0x547D,0x101B,0x8E,0x65, - 0x08,0x00, 0x2B,0x2B,0xD1,0x19); -typedef struct ICreateErrorInfo ICreateErrorInfo,*LPCREATEERRORINFO; - -DEFINE_GUID(IID_ISupportErrorInfo, 0xDF0B3D60,0x547D,0x101B,0x8E,0x65, - 0x08,0x00, 0x2B,0x2B,0xD1,0x19); -typedef struct ISupportErrorInfo ISupportErrorInfo,*LPSUPPORTERRORINFO; - /***************************************************************************** * Automation data types */ -- GitLab