In many cases you may need to call the "CoInitialize(Nil)" and CoUninitialize at the
start and end of our app.
I can offer you a junk test section of a app Test app for you to look at that uses the Voice engine.
procedure TForm1.Button1Click(Sender: TObject);
var
SpVoice: olevariant;
pt, X: olevariant;
T: IDispatch;
P: Dword;
S: WideString;
DISPID: integer;
GUID: TGUID;
szMember: PoleChar = 'ISpObjectToken';
UIRequested: olevariant;// = 'EngineProperties';
R: integer;
OleR, OleT: olevariant;
begin
// OleR := 0;
UIRequested := 'EngineProperties';
//ActiveX
//ComObj.
DispId := 0;
// GUID := GUID.
FillChar(GUID, Sizeof(GUID), 0);
SetLength(S, 30000);
SpVoice := CreateOleObject('SAPI.SpVoice');
T := SpVoice;
R := T.GetIDsOfNames(GUID, @szMember, 1, $800, @DISPID);
Caption := IntToStr(DispId);
// R := SpVoice.IsUISupported(UIrequested);
OleR := 0;
//R := SpVoice.DisplayUI(Handle, 'Title','Audio Volume');
OleR := SpVoice.Rate;
SpVoice.Volume := 100;
OleR := SpVoice.Voice;
//SpVoice.Voice := OleR;
// Caption := IntTostr(Oler);
SpVoice.Speak('K A 1 L P A Slow Scan', 0);
end;