Вниз
Скачать: CL | DM;

Динамическая загрузка dll   Найти похожие ветки 

← →
plotn   (2006-02-08 12:13) [0]

Всем привет, есть вопрос.

В модуле на дельфи есть обращение к dll, примерно в таком виде

function BASS_SetConfig(option, value: DWORD): DWORD; stdcall; external "bass.dll";

Понятное дело, что для работы программы винда должна найти эту dll, для чего одна должна лежать по системному пути.

Можно ли как то загрузить эту библиотеку из произвольного места. (ситуация осложняется тем, что эта dll вызывается из другой dll и хочется их положить в одно место)

Спасибо заранее.


← →
Игорь Шевченко ©   (2006-02-08 12:21) [1]


> Можно ли как то загрузить эту библиотеку из произвольного
> места


Можно. Рядом с EXEшником положить.


← →
Digitman ©   (2006-02-08 12:22) [2]


> по системному пути


Это в последнюю очередь.
Сначала модуль ищется в тек.директории и в директориях, указанных в PATH-параметре в окружении процесса и сист.окружении


> function BASS_SetConfig(option, value: DWORD): DWORD; stdcall;
>  external "bass.dll";


Это не динамическая, а статическая загрузка.

Динамическая же выполняется вызовом LoadLibrary() с указанным параметром - полным путем к модулю. Этот самый путь ты волен задать каким угодно.


← →
xShadow ©   (2006-02-08 12:28) [3]

И по конкурентому примеру
> function BASS_SetConfig(option, value: DWORD): DWORD; stdcall;
>  external "bass.dll";


В комплекте Bass есть готовое решение dynamic_bass.pas


← →
plotn   (2006-02-08 12:31) [4]

Спасибо за ответы, мне рядом с exe не катит, потому что моя dll лежит не рядом с ним (это типа плугин), и та, которую я пользую я буду класть рядом с моей.

Вопрос Digitmanу - как переделать со статичной загрузки в динамичную?
хорошо бы с вышеозначенным примером.

я просто не знаю как в таком случае фунцкии объявлять. (эти, которые с external)


← →
plotn   (2006-02-08 12:40) [5]

Всем спасибо, вопрос снимается. Разобрался по dynamic_bass.pas


← →
Digitman ©   (2006-02-08 12:40) [6]

type
TBASS_SetConfig = function(option, value: DWORD): DWORD; stdcall;

..

var
 hBassDll: THandle;
 BASS_SetConfig: TBASS_SetConfig;

..
 
hBassDll := LoadLibrary(путь к bass.dll); //загрузка модуля
if hBassDll <> 0 then begin
  BASS_SetConfig := GetProcAddress(hBassDll, "BASS_SetConfig"); //адрес интересующей ф-ции
  if @BASS_SetConfig <> nil then
    Результат := BASS_SetConfig(параметры); //собственно вызов ф-ции
...
  FreeLibrary(hBassDll); // выгрузка модуля
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
2-1144831112
RomanH
2006-04-12 12:38
2006.04.30
IBDataSet на сервере приложений


6-1137397801
Pazitron_Brain
2006-01-16 10:50
2006.04.30
Как организовать чат с использованием TClientSocket и TServerSock


2-1144838409
Alex_C
2006-04-12 14:40
2006.04.30
Как отслеживать, запущено ли приложение?


2-1144209485
de_ICER-T44
2006-04-05 07:58
2006.04.30
Даты в базах DBF


1-1143296623
Любопытствующий
2006-03-25 17:23
2006.04.30
Описания функций в справке Borland Delphi




   Наверх