
16.12.2009, 17:02
|
|
Познающий
Регистрация: 19.08.2008
Сообщений: 69
С нами:
9329667
Репутация:
31
|
|
у кого есть какие-нибудь идеи насчёт моей проблемы? =)
Все разобрался вроде Я не правильно объявлял функции=)
Вот так это должно выглядеть
Код:
procedure TForm1.Button1Click(Sender: TObject);
type
TBASS_Init = function(device: LongInt; freq, flags: DWORD; win: HWND; clsid: PGUID): Boolean; stdcall;
TBASS_StreamCreateFile = function(mem: BOOL; f: Pointer; offset, length: Int64; flags: DWORD): DWORD; stdcall;
TBASS_ChannelPlay = function(handle: DWORD; restart: BOOL): BOOL; stdcall;
var
BASS_Init : TBASS_Init;
BASS_StreamCreateFile : TBASS_StreamCreateFile;
BASS_ChannelPlay: TBASS_ChannelPlay;
DLLInstance : THandle;
stream:TStream;
mem: Pointer;
Channel1:HWND;
begin
stream:=TResourceStream.Create(hinstance,PChar('doorup'),PChar('sounds'));
GetMem(mem, stream.size);
stream.Read(mem^, stream.Size);
DLLInstance := LoadLibrary(PChar('bass.dll'));
if (DLLInstance = 0) then
begin
MessageDlg('Невозможно загрузить DLL', mtError, [mbOK], 0);
Exit;
end;
try
@BASS_Init := GetProcAddress(DLLInstance, 'BASS_Init');
@BASS_StreamCreateFile := GetProcAddress(DLLInstance, 'BASS_StreamCreateFile');
@BASS_ChannelPlay := GetProcAddress(DLLInstance, 'BASS_ChannelPlay');
if Assigned(@BASS_StreamCreateFile) and (Assigned(@BASS_ChannelPlay)) and (Assigned(@BASS_Init)) then
begin
if BASS_Init(-1, 44100, 0, Application.Handle, nil) then
begin
Channel1:=BASS_StreamCreateFile(true,mem,0,stream.Size,0);
showmessage(IntToStr(Channel1));
BASS_ChannelPlay(Channel1, true); // timeisout
end;
end
else
MessageDlg('Не найдена искомая процедура!.', mtError,[mbOK], 0);
finally
// FreeLibrary(DLLInstance); // если не закоментировать то звук воспроизводится рывками
end;
end;
Последний раз редактировалось Uname-A; 16.12.2009 в 17:45..
|
|
|