[PATCH v3 4/8] dllhost: Implement IClassFactory::CreateInstance().

Dmitry Timoshkov dmitry at baikal.ru
Tue Mar 8 04:10:15 CST 2022


Hi Huw,

thanks for the review!

Huw Davies <huw at codeweavers.com> wrote:

> > diff --git a/programs/dllhost/dllhost.c b/programs/dllhost/dllhost.c
> > index 691f233906a..681a20a6bb5 100644
> > --- a/programs/dllhost/dllhost.c
> > +++ b/programs/dllhost/dllhost.c
> > @@ -98,8 +98,14 @@ static ULONG WINAPI factory_Release(IClassFactory *iface)
> >  static HRESULT WINAPI factory_CreateInstance(IClassFactory *iface,
> >      IUnknown *punkouter, REFIID iid, void **ppv)
> >  {
> > -    FIXME("(%p,%p,%s,%p): stub\n", iface, punkouter, wine_dbgstr_guid(iid), ppv);
> > -    return E_NOTIMPL;
> > +    struct factory *factory = impl_from_IClassFactory(iface);
> > +
> > +    TRACE("(%p,%p,%s,%p)\n", iface, punkouter, wine_dbgstr_guid(iid), ppv);
> > +
> > +    if (punkouter)
> > +        return CLASS_E_NOAGGREGATION;
> > +
> > +    return CoGetClassObject(&factory->clsid, CLSCTX_INPROC_SERVER, NULL, iid, ppv);
> 
> Shouldn't this ask for IID_IClassFactory, from which CreateInstance is
> called?  You can also pass punkouter to the inproc CreateInstance; see
> the link you sent me:
> 
> https://docs.microsoft.com/en-us/windows/win32/com/writing-a-custom-surrogate

Actually this patch could be dropped because according to the results I get
with this patch set IClassFactory::CreateInstance() is never called under Wine
during the surrogate invocation, and if really necessary could be implemented
the way you (and MSDN) suggest. Other patches in the series should apply cleanly
without this patch.

-- 
Dmitry.



More information about the wine-devel mailing list