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

Huw Davies huw at codeweavers.com
Tue Mar 8 04:02:43 CST 2022


On Thu, Feb 24, 2022 at 11:50:43AM +0300, Dmitry Timoshkov wrote:
> Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
> ---
>  programs/dllhost/dllhost.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> 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

Huw.



More information about the wine-devel mailing list