![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подключение DLL [D6, WinXP]
Mameluke © (2005-07-06 17:25:00)Здравствуйте!
Буду благодарен за любую помощь в разрешении следующей проблемы:
существуют несколько разных DLL-библиотек, содержащих одинаковую функцию (вернее, каждая библиотека содержит свой вариант реализации этой функции). Насколько мне известно, подключение функции из DLL-библиотеки осуществляется, к примеру, следующим образом:
function ExtHashFunc (Str: ShortString; A,B: real; M:integer):integer;
external 'ExternalHashFunc/ExtHashIn.dll';
но при таком подключении невозможно изменить имя DLL. Передо мной стоит задача сделать так, чтобы при использовании программы пользователь мог выбирать нужную DLL (через OpenDialog) с той реализацией функции, которую сочтет предпочтительной. Каким образом можно осуществить возможность такого выбора? Я слышал про динамическую загрузку и функции
LoadLibrary и GetProcAddress, но что это такое и как это использовать в моем случае?
Mameluke (2005-07-08 01:44:00) [1]Большое спасибо! Разобрался, теперь все работает!
Ega23 (2005-07-06 17:31:00) [2]Использовать динаическую загрузку dll.
procedure TForm1.Button3Click(Sender: TObject);
type
TWork = function(List:TKedrObjList):Boolean;
var
hLib:THandle;
Work:TWork;
begin
if not OpenDlg.Execute then Exit;
hLib:=LoadLibrary(PChar(OpenDlg.fileName));
@Work:=GetProcAddress(hLib, PChar('WORK'));
if @Work<> nil then Work(KedrObjList);
FreeLibrary(hLib);
end;