[PATCH 2/5] windows.media.speech: Move SpeechSynthesizer into sperate file.

Rémi Bernon rbernon at codeweavers.com
Sun Mar 6 03:54:19 CST 2022


Hi Bernhard,

On 3/5/22 20:54, Bernhard Kölbl wrote:
 > +
 > +void STDMETHODCALLTYPE 
speech_synthesizer_get_activation_factory(IActivationFactory **factory)
 > +{
 > +    *factory = &windows_media_speech.IActivationFactory_iface;
 > +}

I'd suggest to make a global extern pointer variable to one of the 
factory interface directly, it'll be shorter. For instance something 
like "synthesizer_factory" or "synthesizer_statics" seems short and 
explicit enough.


 >   HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID riid, void 
**out)
 >   {
 >       FIXME("clsid %s, riid %s, out %p stub!\n", 
debugstr_guid(clsid), debugstr_guid(riid), out);
 > @@ -580,7 +38,7 @@ HRESULT WINAPI DllGetActivationFactory(HSTRING 
classid, IActivationFactory **fac
 >           return CLASS_E_CLASSNOTAVAILABLE;
 >       }
 >
 > -    *factory = &windows_media_speech.IActivationFactory_iface;
 > +    speech_synthesizer_get_activation_factory(factory);
 >       IUnknown_AddRef(*factory);
 >       return S_OK;
 >   }


And here, you can then also use IInspectable_QueryInterface to retrieve 
the IActivationFactory iface from the pointer while increasing the 
refcount at the same time, and getting an HRESULT too.

Of course, if you expose the IActivationFactory pointer, QueryInterface 
isn't really needed, but I found that sometimes exposing another of the 
statics iface can be useful, and DllGetActivationFactory is the only 
place where the IActivationFactory is needed.

-- 
Rémi Bernon <rbernon at codeweavers.com>



More information about the wine-devel mailing list