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

  #5220  
Старый 16.12.2009, 12:51
Uname-A
Познающий
Регистрация: 19.08.2008
Сообщений: 69
С нами: 9329667

Репутация: 31
По умолчанию

Приветствую.

Собственно прошу помочь разобраться с динамической загрузкой дллки bass.dll

До сего дня юзал статический способ(aka простой) но этот способ требовал обязательного наличия дллки рядом с программой Что само по себе мне не подходит

Начал смотреть в сторону динамической загрузки Но почему то код на отрез отказывается работать=(

Прошу знающих людей посмотреть и сказать что не так(код не самый красивый и удобный Это всего лишь пробный вариант)

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  BASS_Init : function(device: LongInt; freq, flags: DWORD; win: HWND; clsid: PGUID): Boolean;
  BASS_StreamCreateFile : function(mem: BOOL; f: Pointer; offset, length: Int64; flags: DWORD): DWORD;
  BASS_ChannelPlay: function(handle: DWORD; restart: BOOL): BOOL;
  DLLInstance : THandle;
var 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
    showmessage('uuu');
     if BASS_Init(-1, 44100, 0, Application.Handle, nil) then
     begin
     Channel1:=BASS_StreamCreateFile(true,mem,0,stream.Size,0);
     BASS_ChannelPlay(Channel1, true);  // timeisout
     end;
     end
    else
      MessageDlg('Не найдена искомая процедура!.', mtError,[mbOK], 0);
  finally
    FreeLibrary(DLLInstance);
  end;
end;
ПЫ СЫ: bass.dll версии 2.4, ошибка появляется на строчке которую я выделил Текст ошибки ниже:

Код:
 ---------------------------
Debugger Fault Notification
---------------------------
Project C:\Documents and Settings\Admin\Рабочий стол\Test\Project1.exe faulted with message: 'access violation at 0x0000c35d: read of address 0x0000c35d'. Process Stopped. Use Step or Run to continue.
---------------------------
OK   
---------------------------
 
Ответить с цитированием