From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
--- dlls/msado15/recordset.c | 10 +++++++++- dlls/msado15/tests/msado15.c | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index 84084bee5a7..c3b44e4df97 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -865,11 +865,19 @@ static HRESULT WINAPI fields_QueryInterface( Fields *iface, REFIID riid, void ** struct fields *fields = impl_from_Fields( iface ); TRACE( "%p, %s, %p\n", iface, debugstr_guid(riid), obj );
- if (IsEqualGUID( riid, &IID_Fields ) || IsEqualGUID( riid, &IID_IDispatch ) || + if (IsEqualGUID( riid, &IID_Fields ) || + IsEqualGUID( riid, &IID_Fields20 ) || + IsEqualGUID( riid, &IID_Fields15 ) || + IsEqualGUID( riid, &IID_IDispatch ) || IsEqualGUID( riid, &IID_IUnknown )) { *obj = iface; } + else if (IsEqualGUID( riid, &IID__Collection )) + { + TRACE( "interface _Collection cannot be queried returning NULL\n" ); + return E_NOINTERFACE; + } else if (IsEqualGUID( riid, &IID_ISupportErrorInfo )) { *obj = &fields->ISupportErrorInfo_iface; diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 5264cf710bc..7588dd3db3f 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -789,6 +789,9 @@ static void test_Fields(void) { _Recordset *recordset; ISupportErrorInfo *errorinfo; + Fields20 *fields20; + Fields15 *fields15; + _Collection *collection; unsigned char prec, scale; Fields *fields; Field *field, *field2; @@ -809,6 +812,17 @@ static void test_Fields(void) hr = _Recordset_get_Fields( recordset, &fields ); ok( hr == S_OK, "got %08lx\n", hr );
+ hr = Fields_QueryInterface( fields, &IID_Fields20, (void **)&fields20 ); + ok( hr == S_OK, "got %08lx\n", hr ); + Fields20_Release( fields20 ); + + hr = Fields_QueryInterface( fields, &IID_Fields15, (void **)&fields15 ); + ok( hr == S_OK, "got %08lx\n", hr ); + Fields15_Release( fields15 ); + + hr = Fields_QueryInterface( fields, &IID__Collection, (void **)&collection ); + ok( hr == E_NOINTERFACE, "got %08lx\n", hr ); + /* Fields object supports ISupportErrorInfo */ errorinfo = NULL; hr = Fields_QueryInterface( fields, &IID_ISupportErrorInfo, (void **)&errorinfo );