Показать сообщение отдельно
  #3  
Старый 06.06.2011, 21:13
Аватар для GriLab
GriLab GriLab вне форума
Начинающий
 
Регистрация: 26.11.2010
Адрес: Минск
Сообщения: 190
Версия Delphi: XE 15.0.3890
Репутация: 415
Счастье

Очень люблю эту DLL-библиотеку

Ваш алгоритм не понятен. Если в списке выбран пункт(ы), то Вы освобождаете память (BASS_Free), занимаемую этой библиотекой, потом опять предварительно загружаете библиотеку для работы с ней (BASS_Init).

Если Вы хотите освободить память, занимаемую не самой DLL, а потоком воспроизведения, то используйте данный код (я понимаю, что Вы именно это и хотите сделать):

Код:
BASS_ChannelFree(Channel);

Если немного подправить ваш код, то получится следующие (я бы делал таким образом):

Объявляете нейкую переменную типа QWORD или Cardinal в своей форме или юните, не в процедуре:

Код:
var
  Channel: Cardinal;

При запуске программы в событии TForm.OnCreate инитиализируете эту библиотеку:

Код:
procedure MyForm.MyFormCreate(Sender: TObject);
begin
  BASS_Init(-1, 44100, 2, 0, nil);  // Инитиализация
end;

В событии TButton.OnClick пишите следующие:

Код:
procedure MyForm.PlayButtonClick(Sender: TObject);
begin
  if Channel <> 0 then
  begin
    BASS_ChannelFree(Channel); // Освобождаем поток воспроизведения, если он был ранее создан
    Channel := 0;
  end;
  if MyEdit.Text <> '' then
  begin
    Channel := BASS_StreamCreateURL(PAnsiChar(MyEdit.Text), 0, 0, nil, 0);
    if Channel <> 0 then
      BASS_ChannelPlay(Channel, False);
  end;
end;

P.S. MyEdit - это TEdit, куда Вы вводите адрес URL.

При освобождении формы из памяти в событии TForm.OnDestroy пишем:

Код:
procedure MyForm.MyFormDestroy(Sender: TObject);
begin
  BASS_Free;  // Освобождение DLL из памяти
end;
Ответить с цитированием