Re: [3/5] netprofm: Add a class factory implementation.
Hi Hans, Hans Leidekker <hans(a)codeweavers.com> wrote:
+struct netprofm_cf +{ + const struct IClassFactoryVtbl *vtbl; + HRESULT (*create_instance)(void **); +}; + +static inline struct netprofm_cf *impl_from_IClassFactory( IClassFactory *iface ) +{ + return (struct netprofm_cf *)((char *)iface - FIELD_OFFSET( struct netprofm_cf, vtbl )); +}
Objects in this new dll don't follow http://wiki.winehq.org/COMGuideline, but that's not a big problem, and could be fixed later.
+static HRESULT WINAPI netprofm_cf_CreateInstance( IClassFactory *iface, LPUNKNOWN outer, + REFIID riid, LPVOID *obj ) +{ + struct netprofm_cf *factory = impl_from_IClassFactory( iface ); + IUnknown *unk; + HRESULT r; + + TRACE( "%p %s %p\n", outer, debugstr_guid(riid), obj ); + + *obj = NULL; + if (outer) return CLASS_E_NOAGGREGATION; + + r = factory->create_instance( (void **)&unk ); + if (FAILED( r )) + return r; + + r = IUnknown_QueryInterface( unk, riid, obj ); + if (FAILED( r )) + return r; + + IUnknown_Release( unk ); + return r; +}
It seems that 'unk' is leaked if IUnknown_QueryInterface fails. -- Dmitry.
participants (1)
-
Dmitry Timoshkov