[PATCH 2/2] mscoree: There can be only one QI implementation i a COM object!

Vincent Povirk madewokherd at gmail.com
Thu Sep 8 19:45:55 CDT 2016


These look like 2 separate COM objects to me. They have different
IUnknown pointers and a different set of implemented interfaces. Is
there a reason to link them?

On Thu, Sep 8, 2016 at 2:25 PM, Michael Stefaniuc <mstefani at redhat.de> wrote:
> Signed-off-by: Michael Stefaniuc <mstefani at redhat.de>
> ---
>  dlls/mscoree/config.c | 29 +++++++++--------------------
>  1 file changed, 9 insertions(+), 20 deletions(-)
>
> diff --git a/dlls/mscoree/config.c b/dlls/mscoree/config.c
> index b8bf882..a52a521 100644
> --- a/dlls/mscoree/config.c
> +++ b/dlls/mscoree/config.c
> @@ -73,18 +73,19 @@ static inline ConfigFileHandler *impl_from_ISAXErrorHandler(ISAXErrorHandler *if
>  static HRESULT WINAPI ConfigFileHandler_QueryInterface(ISAXContentHandler *iface,
>      REFIID riid, void **ppvObject)
>  {
> -    if (IsEqualGUID(riid, &IID_ISAXContentHandler) ||
> -        IsEqualGUID(riid, &IID_IUnknown))
> -    {
> -        *ppvObject = iface;
> -    }
> +    ConfigFileHandler *This = impl_from_ISAXContentHandler(iface);
> +
> +    if (IsEqualGUID(riid, &IID_ISAXContentHandler) || IsEqualGUID(riid, &IID_IUnknown))
> +        *ppvObject = &This->ISAXContentHandler_iface;
> +    else if (IsEqualGUID(riid, &IID_ISAXErrorHandler))
> +        *ppvObject = &This->ISAXErrorHandler_iface;
>      else
>      {
>          WARN("Unsupported interface %s\n", debugstr_guid(riid));
>          return E_NOINTERFACE;
>      }
>
> -    ISAXContentHandler_AddRef(iface);
> +    IUnknown_AddRef((IUnknown*)*ppvObject);
>
>      return S_OK;
>  }
> @@ -377,20 +378,8 @@ static const struct ISAXContentHandlerVtbl ConfigFileHandlerVtbl =
>  static HRESULT WINAPI ConfigFileHandler_Error_QueryInterface(ISAXErrorHandler *iface,
>      REFIID riid, void **ppvObject)
>  {
> -    if (IsEqualGUID(riid, &IID_ISAXErrorHandler) ||
> -        IsEqualGUID(riid, &IID_IUnknown))
> -    {
> -        *ppvObject = iface;
> -    }
> -    else
> -    {
> -        WARN("Unsupported interface %s\n", debugstr_guid(riid));
> -        return E_NOINTERFACE;
> -    }
> -
> -    ISAXErrorHandler_AddRef(iface);
> -
> -    return S_OK;
> +    ConfigFileHandler *This = impl_from_ISAXErrorHandler(iface);
> +    return ISAXContentHandler_QueryInterface(&This->ISAXContentHandler_iface, riid, ppvObject);
>  }
>
>  static ULONG WINAPI ConfigFileHandler_Error_AddRef(ISAXErrorHandler *iface)
> --
> 2.7.4
>
>



More information about the wine-devel mailing list