[2/2] oledb32: Add support for IErrorRecords

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Tue Jul 23 05:38:31 CDT 2013


Hi,


Changelog:
     oledb32:  Add support for IErrorRecords


Best Regards
  Alistair Leslie-Hughes
-------------- next part --------------
>From afece4fdc28373a99e4687829f1d76ab93efd0b8 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Tue, 18 Jun 2013 10:22:57 +1000
Subject: [PATCH] Add support for IErrorRecords
To: wine-patches <wine-patches at winehq.org>

---
 dlls/msdaps/usrmarshal.c | 183 +++++++++++++++++++++++++++++++++++++++++++++++
 include/errrec.idl       |  78 ++++++++++++++++++++
 include/oledb.idl        |   1 +
 3 files changed, 262 insertions(+)
 create mode 100644 include/errrec.idl

diff --git a/dlls/msdaps/usrmarshal.c b/dlls/msdaps/usrmarshal.c
index 7bbaa7b..b93340e 100644
--- a/dlls/msdaps/usrmarshal.c
+++ b/dlls/msdaps/usrmarshal.c
@@ -1096,3 +1096,186 @@ HRESULT __RPC_STUB ISourcesRowset_GetSourcesRowset_Stub(ISourcesRowset* This, IU
 
     return hr;
 }
+
+HRESULT CALLBACK IErrorRecords_GetRecordCount_Proxy(IErrorRecords* This, ULONG *records)
+{
+    HRESULT hr;
+    IErrorInfo *error;
+
+    TRACE("(%p)->%p\n", This, records);
+
+    hr = IErrorRecords_RemoteGetRecordCount_Proxy(This, records, &error);
+    if(error)
+    {
+        SetErrorInfo(0, error);
+        IErrorInfo_Release(error);
+    }
+
+    return hr;
+}
+
+HRESULT __RPC_STUB IErrorRecords_GetRecordCount_Stub(IErrorRecords* This, ULONG *pcRecords, IErrorInfo **ppErrorInfoRem)
+{
+    HRESULT hr;
+
+    TRACE("(%p)->%p %p\n", This, pcRecords, ppErrorInfoRem);
+
+    *ppErrorInfoRem = NULL;
+    hr = IErrorRecords_GetRecordCount(This, pcRecords);
+    if(FAILED(hr))
+        GetErrorInfo(0, ppErrorInfoRem);
+
+    return hr;
+}
+
+HRESULT CALLBACK IErrorRecords_GetErrorParameters_Proxy(IErrorRecords* This, ULONG ulRecordNum, DISPPARAMS *pdispparams)
+{
+    HRESULT hr;
+    IErrorInfo *error;
+
+    TRACE("(%p)->%d %p\n", This, ulRecordNum, pdispparams);
+
+    hr = IErrorRecords_RemoteGetErrorParameters_Proxy(This, ulRecordNum, pdispparams, &error);
+    if(error)
+    {
+        SetErrorInfo(0, error);
+        IErrorInfo_Release(error);
+    }
+
+    return hr;
+}
+
+HRESULT __RPC_STUB IErrorRecords_GetErrorParameters_Stub(IErrorRecords* This, ULONG ulRecordNum, DISPPARAMS *pdispparams,
+    IErrorInfo **ppErrorInfoRem)
+{
+    HRESULT hr;
+
+    TRACE("(%p)->%d %p %p\n", This, ulRecordNum, pdispparams, ppErrorInfoRem);
+
+    *ppErrorInfoRem = NULL;
+    hr = IErrorRecords_GetErrorParameters(This, ulRecordNum, pdispparams);
+    if(FAILED(hr))
+        GetErrorInfo(0, ppErrorInfoRem);
+
+    return hr;
+}
+
+HRESULT CALLBACK IErrorRecords_GetErrorInfo_Proxy(IErrorRecords* This, ULONG ulRecordNum, LCID lcid, IErrorInfo **ppErrorInfo)
+{
+    HRESULT hr;
+    IErrorInfo *error;
+
+    TRACE("(%p)->%d %d %p\n", This, ulRecordNum, lcid, ppErrorInfo);
+
+    hr = IErrorRecords_RemoteGetErrorInfo_Proxy(This, ulRecordNum, lcid, ppErrorInfo, &error);
+    if(error)
+    {
+        SetErrorInfo(0, error);
+        IErrorInfo_Release(error);
+    }
+
+    return hr;
+}
+
+HRESULT __RPC_STUB IErrorRecords_GetErrorInfo_Stub(IErrorRecords* This, ULONG ulRecordNum, LCID lcid,
+    IErrorInfo **ppErrorInfo, IErrorInfo **ppErrorInfoRem)
+{
+    HRESULT hr;
+
+    TRACE("(%p)->%d %d %p %p\n", This, ulRecordNum, lcid, ppErrorInfo, ppErrorInfoRem);
+
+    *ppErrorInfoRem = NULL;
+    hr = IErrorRecords_GetErrorInfo(This, ulRecordNum, lcid, ppErrorInfo);
+    if(FAILED(hr))
+        GetErrorInfo(0, ppErrorInfoRem);
+
+    return hr;
+}
+
+HRESULT CALLBACK IErrorRecords_GetCustomErrorObject_Proxy(IErrorRecords* This, ULONG ulRecordNum, REFIID riid,
+    IUnknown **ppObject)
+{
+    HRESULT hr;
+    IErrorInfo *error;
+
+    TRACE("(%p)->%d %s %p\n", This, ulRecordNum, debugstr_guid(riid), ppObject);
+
+    hr = IErrorRecords_RemoteGetCustomErrorObject_Proxy(This, ulRecordNum, riid, ppObject, &error);
+    if(error)
+    {
+        SetErrorInfo(0, error);
+        IErrorInfo_Release(error);
+    }
+    return hr;
+}
+
+HRESULT __RPC_STUB IErrorRecords_GetCustomErrorObject_Stub(IErrorRecords* This, ULONG ulRecordNum, REFIID riid,
+    IUnknown **ppObject, IErrorInfo **ppErrorInfoRem)
+{
+    HRESULT hr;
+
+    TRACE("(%p)->%d %s %p %p\n", This, ulRecordNum, debugstr_guid(riid), ppObject, ppErrorInfoRem);
+
+    *ppErrorInfoRem = NULL;
+    hr = IErrorRecords_GetCustomErrorObject(This, ulRecordNum, riid, ppObject);
+    if(FAILED(hr))
+        GetErrorInfo(0, ppErrorInfoRem);
+
+    return hr;
+}
+
+HRESULT CALLBACK IErrorRecords_GetBasicErrorInfo_Proxy(IErrorRecords* This, ULONG ulRecordNum, ERRORINFO *pErrorInfo)
+{
+    TRACE("(%p)->%d %p\n", This, ulRecordNum, pErrorInfo);
+
+    return IErrorRecords_GetBasicErrorInfo_Proxy(This, ulRecordNum, pErrorInfo);
+}
+
+HRESULT __RPC_STUB IErrorRecords_GetBasicErrorInfo_Stub(IErrorRecords* This, ULONG ulRecordNum, ERRORINFO *pErrorInfo,
+    IErrorInfo **ppErrorInfoRem)
+{
+    HRESULT hr;
+
+    TRACE("(%p)->%d %p %p\n", This, ulRecordNum, pErrorInfo, ppErrorInfoRem);
+
+    *ppErrorInfoRem = NULL;
+    hr = IErrorRecords_GetBasicErrorInfo(This, ulRecordNum, pErrorInfo);
+    if(FAILED(hr))
+        GetErrorInfo(0, ppErrorInfoRem);
+
+    return hr;
+}
+
+HRESULT CALLBACK IErrorRecords_AddErrorRecord_Proxy(IErrorRecords* This, ERRORINFO *pErrorInfo, DWORD dwLookupID,
+    DISPPARAMS *pdispparams, IUnknown *punkCustomError, DWORD dwDynamicErrorID)
+{
+    HRESULT hr;
+    IErrorInfo *error;
+
+    TRACE("(%p)->%p %d %p %p %d\n", This, pErrorInfo, dwLookupID, pdispparams, punkCustomError, dwDynamicErrorID);
+
+    hr = IErrorRecords_RemoteAddErrorRecord_Proxy(This, pErrorInfo, dwLookupID, pdispparams, punkCustomError,
+        dwDynamicErrorID, &error);
+    if(error)
+    {
+        SetErrorInfo(0, error);
+        IErrorInfo_Release(error);
+    }
+    return hr;
+}
+
+HRESULT __RPC_STUB IErrorRecords_AddErrorRecord_Stub(IErrorRecords* This, ERRORINFO *pErrorInfo, DWORD dwLookupID,
+    DISPPARAMS *pdispparams, IUnknown *punkCustomError, DWORD dwDynamicErrorID, IErrorInfo **ppErrorInfoRem)
+{
+    HRESULT hr;
+
+    TRACE("(%p)->%p %d %p %p %d %p\n", This, pErrorInfo, dwLookupID, pdispparams, punkCustomError,
+                        dwDynamicErrorID, ppErrorInfoRem);
+
+    *ppErrorInfoRem = NULL;
+    hr = IErrorRecords_AddErrorRecord(This, pErrorInfo, dwLookupID, pdispparams, punkCustomError, dwDynamicErrorID);
+    if(FAILED(hr))
+        GetErrorInfo(0, ppErrorInfoRem);
+
+    return hr;
+}
diff --git a/include/errrec.idl b/include/errrec.idl
new file mode 100644
index 0000000..865b3f2
--- /dev/null
+++ b/include/errrec.idl
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2013 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+[
+    object,
+    uuid(0c733a67-2a1c-11ce-ade5-00aa0044773d),
+    pointer_default(unique)
+]
+interface IErrorRecords : IUnknown
+{
+
+cpp_quote("#define IDENTIFIER_SDK_MASK   0xF0000000")
+cpp_quote("#define IDENTIFIER_SDK_ERROR  0x10000000")
+
+typedef struct tagERRORINFO
+{
+    HRESULT hrError;
+    DWORD dwMinor;
+    CLSID clsid;
+    IID iid;
+    DISPID dispid;
+} ERRORINFO;
+
+    [local]
+    HRESULT AddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams,
+        [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID);
+
+    [call_as(AddErrorRecord)]
+    HRESULT RemoteAddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams,
+        [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID, [out] IErrorInfo ** ppErrorInfoRem);
+
+    [local]
+    HRESULT GetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo);
+
+    [call_as(GetBasicErrorInfo)]
+    HRESULT RemoteGetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo, [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject);
+
+    [call_as(GetCustomErrorObject)]
+    HRESULT RemoteGetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject,
+        [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo);
+
+    [call_as(GetErrorInfo)]
+    HRESULT RemoteGetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo,
+        [out] IErrorInfo **ppErrorInfoRem);
+
+    [local]
+    HRESULT GetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams);
+
+    [call_as(GetErrorParameters)]
+    HRESULT RemoteGetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams, [out] IErrorInfo ** ppErrorInfoRem);
+
+    [local]
+    HRESULT GetRecordCount([out] ULONG *records);
+
+    [call_as(GetRecordCount)]
+    HRESULT RemoteGetRecordCount([out] ULONG * pcRecords, [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/include/oledb.idl b/include/oledb.idl
index 0580932..5cd287f 100644
--- a/include/oledb.idl
+++ b/include/oledb.idl
@@ -66,6 +66,7 @@ typedef DWORD_PTR DBHASHVALUE;
 #include "rowchg.idl"
 #include "binres.idl"
 #include "crtrow.idl"
+#include "errrec.idl"
 
 cpp_quote("#include <accctrl.h>")
 
-- 
1.8.1.2



More information about the wine-patches mailing list