http://bugs.winehq.org/show_bug.cgi?id=10911
--- Comment #22 from Nikolay Sivov bunglehead@gmail.com 2011-12-16 17:06:01 CST --- So your test program does:
--- 0009:trace:msxml:DispatchEx_GetIDsOfNames (0x134a30)->({00000000-0000-0000-0000-000000000000} 0x33eb04 1 1033 0x33eb48) 0009:trace:msxml:DispatchEx_GetDispID (0x134a30)->(L"LoadXML" 0 0x33eb48) 0009:trace:msxml:preprocess_dispex_data (0x134a30) 0009:trace:msxml:DispatchEx_Invoke (0x134a30)->(63 {00000000-0000-0000-0000-000000000000} 0 1 0x33eae0 (nil) 0x33eb10 (nil)) 0009:trace:msxml:DispatchEx_InvokeEx (0x134a30)->(3f 0 1 0x33eae0 (nil) 0x33eb10 (nil)) 0009:trace:msxml:domdoc_QueryInterface (0x134a30)->({2933bf96-7b36-11d2-b20e-00c04f983e60} 0x33e400) 0009:trace:msxml:domdoc_AddRef (0x134a30)->(3) 0009:trace:msxml:domdoc_loadXML (0x134a30)->(L"\n<?xml version=\"1.0\" encoding=\"UTF-8\" ?><test>test</test>" 0x33e0f8) 0009:err:msxml:doparse XML declaration allowed only at the start of the document 0009:trace:msxml:domdoc_loadXML failed to parse document ---
and after that
--- 0009:trace:msxml:DispatchEx_GetIDsOfNames (0x134a30)->({00000000-0000-0000-0000-000000000000} 0x33eb04 1 1033 0x33eb48) 0009:trace:msxml:DispatchEx_GetDispID (0x134a30)->(L"Save" 0 0x33eb48) 0009:trace:msxml:DispatchEx_Invoke (0x134a30)->(64 {00000000-0000-0000-0000-000000000000} 0 1 0x33eae0 (nil) 0x33eb10 (nil)) 0009:trace:msxml:DispatchEx_InvokeEx (0x134a30)->(40 0 1 0x33eae0 (nil) 0x33eb10 (nil)) 0009:trace:msxml:domdoc_QueryInterface (0x134a30)->({2933bf96-7b36-11d2-b20e-00c04f983e60} 0x33e400) 0009:trace:msxml:domdoc_AddRef (0x134a30)->(3) 0009:trace:msxml:domdoc_save (0x134a30)->({VT_BSTR: L"c:/testing.xml"}) ---
same sequence in a test (well, with direct calls and not IDispatch ones) results in empty file running on Windows. That's what I thought is going on, but really the problem is all about different CLSIDs that are used to create an instance.
Actually there's two CLSID_DOMDocument from different SDK headers with different values, we use the one from msxml2.idl where it's just a define for CLSID_DOMDocument2. But in xmldom.idl it's defined with proper class section using separate IID value.
I'll think how to resolve this name mess.