Показать сообщение отдельно

  #5225  
Старый 16.12.2009, 17:02
Uname-A
Познающий
Регистрация: 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..
 
Ответить с цитированием