Skip to content

Commit

Permalink
sapi: Implement ISpeechVoice::Invoke.
Browse files Browse the repository at this point in the history
  • Loading branch information
shaunren authored and julliard committed Feb 20, 2024
1 parent 9d04466 commit c72f0ec
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
25 changes: 25 additions & 0 deletions dlls/sapi/tests/tts.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,8 @@ static void test_spvoice(void)
ITypeInfo *typeinfo;
TYPEATTR *typeattr;
DISPID dispid;
DISPPARAMS params;
VARIANT args[2], ret;
HRESULT hr;

if (waveOutGetNumDevs() == 0) {
Expand Down Expand Up @@ -739,6 +741,29 @@ static void test_spvoice(void)
ok(hr == S_OK, "got %#lx.\n", hr);
ok(dispid == DISPID_SVGetVoices, "got %#lx.\n", dispid);

memset(&params, 0, sizeof(params));
params.cArgs = 2;
params.cNamedArgs = 0;
params.rgvarg = args;
VariantInit(&args[0]);
VariantInit(&args[1]);
V_VT(&args[0]) = VT_BSTR;
V_VT(&args[1]) = VT_BSTR;
V_BSTR(&args[0]) = opt;
V_BSTR(&args[1]) = req;
VariantInit(&ret);
hr = ISpeechVoice_Invoke(speech_voice, dispid, &IID_NULL, 0, DISPATCH_METHOD, &params, &ret, NULL, NULL);
ok(hr == S_OK, "got %#lx.\n", hr);
ok(V_VT(&ret) == VT_DISPATCH, "got %#x.\n", V_VT(&ret));
hr = IDispatch_QueryInterface(V_DISPATCH(&ret), &IID_ISpeechObjectTokens, (void **)&speech_tokens);
ok(hr == S_OK, "got %#lx.\n", hr);
count = -1;
hr = ISpeechObjectTokens_get_Count(speech_tokens, &count);
ok(hr == S_OK, "got %#lx.\n", hr);
ok(count == 1, "got %ld.\n", count);
ISpeechObjectTokens_Release(speech_tokens);
VariantClear(&ret);

ISpeechVoice_Release(speech_voice);

done:
Expand Down
11 changes: 9 additions & 2 deletions dlls/sapi/tts.c
Original file line number Diff line number Diff line change
Expand Up @@ -213,10 +213,17 @@ static HRESULT WINAPI speech_voice_Invoke(ISpeechVoice *iface, DISPID dispid, RE
WORD flags, DISPPARAMS *params, VARIANT *result,
EXCEPINFO *excepinfo, UINT *argerr)
{
FIXME("(%p, %ld, %s, %#lx, %#x, %p, %p, %p, %p): stub.\n", iface, dispid, debugstr_guid(riid),
ITypeInfo *typeinfo;
HRESULT hr;

TRACE("(%p, %ld, %s, %#lx, %#x, %p, %p, %p, %p).\n", iface, dispid, debugstr_guid(riid),
lcid, flags, params, result, excepinfo, argerr);

return E_NOTIMPL;
if (FAILED(hr = get_typeinfo(ISpeechVoice_tid, &typeinfo)))
return hr;
hr = ITypeInfo_Invoke(typeinfo, iface, dispid, flags, params, result, excepinfo, argerr);
ITypeInfo_Release(typeinfo);
return hr;
}

static HRESULT WINAPI speech_voice_get_Status(ISpeechVoice *iface, ISpeechVoiceStatus **status)
Expand Down

0 comments on commit c72f0ec

Please sign in to comment.