From: Alistair Leslie-Hughes Subject: [PATCH 7/7] msado15: Implement Dispatch functions in ADORecordsetConstruction Message-Id: Date: Fri, 26 Feb 2021 19:02:27 +1100 In-Reply-To: <20210226080227.4724-1-leslie_alistair@hotmail.com> References: <20210226080227.4724-1-leslie_alistair@hotmail.com> Signed-off-by: Alistair Leslie-Hughes --- dlls/msado15/main.c | 1 + dlls/msado15/msado15_private.h | 1 + dlls/msado15/recordset.c | 35 ++++++++++++++++++++++++++++------ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/dlls/msado15/main.c b/dlls/msado15/main.c index 0915a44c64b..197a21dc475 100644 --- a/dlls/msado15/main.c +++ b/dlls/msado15/main.c @@ -179,6 +179,7 @@ static ITypeLib *typelib; static ITypeInfo *typeinfos[LAST_tid]; static REFIID tid_ids[] = { + &IID_ADORecordsetConstruction, &IID__Command, &IID__Connection, &IID_Field, diff --git a/dlls/msado15/msado15_private.h b/dlls/msado15/msado15_private.h index d1e177e1a3c..55afac3f389 100644 --- a/dlls/msado15/msado15_private.h +++ b/dlls/msado15/msado15_private.h @@ -43,6 +43,7 @@ static inline WCHAR *strdupW( const WCHAR *src ) } typedef enum tid_t { + ADORecordsetConstruction_tid, Command_tid, Connection_tid, Field_tid, diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index a4fe5b53736..0b91358f83d 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -1768,16 +1768,27 @@ static HRESULT WINAPI rsconstruction_GetTypeInfo(ADORecordsetConstruction *iface LCID lcid, ITypeInfo **ppTInfo) { struct recordset *recordset = impl_from_ADORecordsetConstruction( iface ); - FIXME( "%p %u %u %p\n", recordset, iTInfo, lcid, ppTInfo ); - return E_NOTIMPL; + TRACE( "%p %u %u %p\n", recordset, iTInfo, lcid, ppTInfo ); + return get_typeinfo(ADORecordsetConstruction_tid, ppTInfo); } static HRESULT WINAPI rsconstruction_GetIDsOfNames(ADORecordsetConstruction *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { struct recordset *recordset = impl_from_ADORecordsetConstruction( iface ); - FIXME( "%p %s %p %u %u %p\n", recordset, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId ); - return E_NOTIMPL; + HRESULT hr; + ITypeInfo *typeinfo; + + TRACE( "%p %s %p %u %u %p\n", recordset, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId ); + + hr = get_typeinfo(ADORecordsetConstruction_tid, &typeinfo); + if(SUCCEEDED(hr)) + { + hr = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId); + ITypeInfo_Release(typeinfo); + } + + return hr; } static HRESULT WINAPI rsconstruction_Invoke(ADORecordsetConstruction *iface, DISPID dispIdMember, @@ -1785,9 +1796,21 @@ static HRESULT WINAPI rsconstruction_Invoke(ADORecordsetConstruction *iface, DIS EXCEPINFO *pExcepInfo, UINT *puArgErr) { struct recordset *recordset = impl_from_ADORecordsetConstruction( iface ); - FIXME( "%p %d %s %d %d %p %p %p %p\n", recordset, dispIdMember, debugstr_guid(riid), + HRESULT hr; + ITypeInfo *typeinfo; + + TRACE( "%p %d %s %d %d %p %p %p %p\n", recordset, dispIdMember, debugstr_guid(riid), lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr ); - return E_NOTIMPL; + + hr = get_typeinfo(ADORecordsetConstruction_tid, &typeinfo); + if(SUCCEEDED(hr)) + { + hr = ITypeInfo_Invoke(typeinfo, &recordset->ADORecordsetConstruction_iface, dispIdMember, wFlags, + pDispParams, pVarResult, pExcepInfo, puArgErr); + ITypeInfo_Release(typeinfo); + } + + return hr; } static HRESULT WINAPI rsconstruction_get_Rowset(ADORecordsetConstruction *iface, IUnknown **row_set) -- 2.30.0