
16.12.2009, 12:51
|
|
Познающий
Регистрация: 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
---------------------------
|
|
|