Показать сообщение отдельно
  #1  
Старый 07.02.2013, 01:31
alexingor alexingor вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 16
Репутация: 10
По умолчанию Программа не завершает работу после анализа голосовых движков

В своей программе я использую слегка модифицированную "стандартную" процедуру для анализа установленных в системе голосовых движков и заполнения комбобокса (в моем случае - комбобоксов) их выбора:
Код:
  procedure LEARN_ENGINES;
  var
    NumFound : DWord;
    ModeInfo : TTSModeInfo;
  begin
    try
      {Инициализация аудиоустройства}
      CoCreateInstance(CLSID_MMAudioDest, Nil, CLSCTX_ALL,
             IID_IAudioMultiMediaDevice, fIAMM);
    except
    end;
    {Создание перечисляемого объекта для перебора всех движков в системе
     с помощью интерфейса ITTSEnum}
    CoCreateInstance(CLSID_TTSEnumerator, Nil, CLSCTX_ALL,
                                           IID_ITTSEnum, aTTSEnum);
    aTTSEnum.Reset;//Сбрасываем на первый
    aTTSEnum.Next(1, ModeInfo, @NumFound); {Получаем первый движок}
    While NumFound > 0 do
    begin
      s:=String(ModeInfo.szModeName);
      if pos('RUS',UpperCase(s))>0 then
        COMBO_VOICE_RUS.Items.Add(s)
      else
        COMBO_VOICE_ENG.Items.Add(s);
      aTTSEnum.Next(1, ModeInfo, @NumFound); {Получаем остальные}
    end;
  end;
Программа нормально работает, в том числе и этот модуль, но после закрытия программы она остается "висеть" в памяти, закрывается только ее видимая часть. Вопрос: Какие действия надо предпринять при закрытии программы, чтобы избежать этого?
PS То, что в неполном закрытии программы виноват именно этот код, убедился точно.
PPS Код брал отсюда.
Ответить с цитированием