[1/4] msxml3: Added common ISupportErrorInfo implementation
Nikolay Sivov
nsivov at codeweavers.com
Mon Nov 21 08:33:01 CST 2011
On 11/21/2011 16:29, Jacek Caban wrote:
> On 11/21/11 15:16, Nikolay Sivov wrote:
>> On 11/21/2011 16:09, Jacek Caban wrote:
>>> Hi Nikolay,
>>>
>>> On 11/21/11 08:24, Nikolay Sivov wrote:
>>>> Added common ISupportErrorInfo implementation
>>>
>>> +/* common ISupportErrorInfo implementation */
>>> +typedef struct {
>>> + ISupportErrorInfo ISupportErrorInfo_iface;
>>> + LONG ref;
>>> +
>>> + const tid_t* iids;
>>> +} SupportErrorInfo;
>>> +
>>> +static inline SupportErrorInfo
>>> *impl_from_ISupportErrorInfo(ISupportErrorInfo *iface)
>>> +{
>>> + return CONTAINING_RECORD(iface, SupportErrorInfo,
>>> ISupportErrorInfo_iface);
>>> +}
>>> +
>>> +static HRESULT WINAPI
>>> SupportErrorInfo_QueryInterface(ISupportErrorInfo *iface, REFIID
>>> riid, void **obj)
>>> +{
>>> + SupportErrorInfo *This = impl_from_ISupportErrorInfo(iface);
>>> + TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj);
>>> +
>>> + *obj = NULL;
>>> +
>>> + if (IsEqualGUID(riid,&IID_IUnknown) ||
>>> IsEqualGUID(riid,&IID_ISupportErrorInfo)) {
>>> + *obj = iface;
>>> + ISupportErrorInfo_AddRef(iface);
>>> + return S_OK;
>>> + }
>>> +
>>> + return E_NOINTERFACE;
>>> +}
>>>
>>>
>>>
>>> This doesn't seem to be the right approach. You need to return here
>>> interfaces of an object that inherits your ISupportErrorInfo
>>> implementation - that's the COM rule.
>> I know but that's not how native works. ISupportErrorInfo reference
>> counting is completely separated from object your queried it from.
>
> Still, QI doesn't look right (unless you also have tests for this).
> See something like this:
>
> IDOMXMLNode_QueryInterface(node, &IID_ISupportErrorInfo, (void**)&sei);
> ISupportErrorInfo_QueryInterface(sei, &IID_IDOMXMLNode, (void**)&node2);
>
> The second QueryInterface call should succeeded, but it won't with
> your implementation.
Yeah, I thought about that when I added this implementation, and maybe
it should work this way but it doesn't on native :)
I have a test for that that I'll submit as a separate patch. This
interface looks more like meta thing that doesn't belong to any DOM
object at all.
More information about the wine-devel
mailing list