Module: wine Branch: master Commit: 0df7cb2f190a1e0191a7b3b5333504e0a3788b6b URL: http://source.winehq.org/git/wine.git/?a=commit;h=0df7cb2f190a1e0191a7b3b533...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Mar 16 17:07:36 2016 +0100
msxml6: Added support for CLSID_XMLSchemaCache60 in XMLSchemaCache60::QueryInterface.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/msxml3/schema.c | 12 ++++++++++++ dlls/msxml3/tests/schema.c | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+)
diff --git a/dlls/msxml3/schema.c b/dlls/msxml3/schema.c index 41d1640..f92130a 100644 --- a/dlls/msxml3/schema.c +++ b/dlls/msxml3/schema.c @@ -1105,6 +1105,18 @@ static HRESULT WINAPI schema_cache_QueryInterface(IXMLDOMSchemaCollection2* ifac { *ppvObject = iface; } + else if(This->version == MSXML6 && IsEqualIID(riid, &CLSID_XMLSchemaCache60)) + { + /* + * Version 6 can be queried for an interface with IID equal to CLSID. + * There is no public interface with that IID and returned pointer + * is equal to returned IXMLDOMSchemaCollection2 iface. We assume + * that it's just another way for querying IXMLDOMSchemaCollection2 + * interface. Office 2013 ClickToRun installer uses this. + */ + WARN("riid CLSID_XMLSchemaCache60, returning IXMLDOMSchemaCollection2 interface.\n"); + *ppvObject = iface; + } else if (dispex_query_interface(&This->dispex, riid, ppvObject)) { return *ppvObject ? S_OK : E_NOINTERFACE; diff --git a/dlls/msxml3/tests/schema.c b/dlls/msxml3/tests/schema.c index bd5c359..8f24e1e 100644 --- a/dlls/msxml3/tests/schema.c +++ b/dlls/msxml3/tests/schema.c @@ -1649,6 +1649,24 @@ static void test_remove(void) free_bstrs(); }
+static void test_ifaces(void) +{ + IXMLDOMSchemaCollection2 *cache; + IUnknown *unk; + HRESULT hr; + + cache = create_cache_version(60, &IID_IXMLDOMSchemaCollection2); + if (!cache) return; + + /* CLSID_XMLSchemaCache60 is returned as an interface (the same as IXMLDOMSchemaCollection2). */ + hr = IXMLDOMSchemaCollection2_QueryInterface(cache, &CLSID_XMLSchemaCache60, (void**)&unk); + ok (hr == S_OK, "Could not get CLSID_XMLSchemaCache60 iface: %08x\n", hr); + ok (unk == (IUnknown*)cache, "unk != cache\n"); + + IUnknown_Release(unk); + IXMLDOMSchemaCollection2_Release(cache); +} + START_TEST(schema) { HRESULT r; @@ -1666,6 +1684,7 @@ START_TEST(schema) test_dispex(); test_get(); test_remove(); + test_ifaces();
CoUninitialize(); }