OLE error trying to do simple SR SAPI code

I've been at this for 2 days and gotten nowhere.  I can do TTS just
fine with almost the exact same code, but cannot get any speech
recognition to work.  Here is my Delphi code:

This is in the event handler that says a call is connected:

  SpMMAudioIn1.DeviceId := etLine1.WaveRecord.ID; //phone device wave
  SpMMAudioIn1.Format.type_ := SAFT8kHz16BitMono;
  SharedRecoContext.EventInterests := SREAllEvents;
  SharedRecognizer.AllowAudioInputFormatChangesOnNextSet := False;
  SharedRecognizer.AudioInputStream := SpMMAudioIn1.DefaultInterface;
  fMyGrammar := SharedRecoContext.CreateGrammar(0);

The error is OLE Exception, OLE Error 8004505F for which there is no
match on the entire web.  The last line is what is being executed.
Stepping through the code for this function which is in SPEECHLIB.PAS,
I find this:

procedure TSpSharedRecognizer._Set_AudioInputStream(const
AudioInputStream: ISpeechBaseStream);
  { Warning: The property AudioInputStream has a setter and a getter
    types do not match. Delphi was unable to generate a property of
    this sort and so is using a Variant as a passthrough. }
  InterfaceVariant: OleVariant;
  InterfaceVariant := DefaultInterface;
  InterfaceVariant.AudioInputStream := AudioInputStream;

The line in this code where the error occurs appears to be the last
line also.  Obviously this has something to do with me trying to
re-route the audio to the device, but I can't figure it out.  Maybe
it's related to the warning above, or because of the pointer to the
stream.  Can anyone help or give me code that works?  I started trying
to use command and control from an XML file, but that didn't work, so
then I just gave up and tried the simplest program I could write and
get an error in the equivalent spot.  Thanks.