10.11.2011, 11:34
|
Продвинутый
|
|
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
|
|
bass.dll Не могу понять в чем ошибка
Код, который не работает:
Код:
type
TMyClass = class
private
FURL: string;
FFile: TFileStream;
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
public
property URL: string read FURL write FURL;
procedure Play;
constructor Create();
destructor Destroy; override;
end;
constructor TMyClass.Create();
begin
inherited;
FURL := '';
if not BASS_Init(-1, 44100, 2, 0, nil) then
raise Exception.Create('Не могу инициализировать звук') else
BASS_Start;
end;
destructor TMyClass.Destroy;
begin
BASS_Free;
inherited;
end;
procedure TMyClass.StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
if (buffer <> nil) and (len = 0) then
FFile.Write(Buffer^, Len);
end;
procedure TMyClass.Play;
var
Stream: HSTREAM;
begin
FreeAndNil(FFile);
FFile := TFileStream.Create('C:\temp.mp3', fmCreate);
Stream := BASS_StreamCreateURL(PAnsiChar(FURL), 0, BASS_STREAM_STATUS, @TMyClass.StatusProc, nil); //Ошибка
if BASS_ErrorGetCode = 0 then begin
BASS_ChannelPlay(Stream, true);
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
My: TMyClass;
begin
My := TMyClass.Create;
My.URL := 'http://cs4587.vkontakte.ru/u2026045/audio/62c024dfa750.mp3';
My.Play;
end;
Код который работает (без класса):
Код:
var
FS: TFileStream;
....
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
if (buffer <> nil) and (len = 0) then
FS.Write(Buffer^, Len);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
Stream: HSTREAM;
begin
if not BASS_Init(-1, 44100, 2, 0, nil) then
raise Exception.Create('Не могу инициализировать звук')
else begin
BASS_Start;
FS := TFileStream.Create('C:\temp.mp3', fmCreate);
Stream := BASS_StreamCreateURL('http://cs4587.vkontakte.ru/u2026045/audio/62c024dfa750.mp3', 0, BASS_STREAM_STATUS, @StatusProc, nil);
if BASS_ErrorGetCode = 0 then begin
BASS_ChannelPlay(Stream, true);
end;
end;
end;
И в чем ошибка?
|