Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

Динамическая загрузка 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.015 c
2-1144662969
Tirael
2006-04-10 13:56
2006.04.30
трабла с драйвером


2-1144742061
Тфьу
2006-04-11 11:54
2006.04.30
А вот вопрос по Oracle


2-1144951770
mobwar
2006-04-13 22:09
2006.04.30
Проблема кодировки после Copy Paste


9-1128942318
SPACE
2005-10-10 15:05
2006.04.30
Народ никак немогу сделать скриншот из игрушки


15-1144323524
ECM
2006-04-06 15:38
2006.04.30
2McSimm: Как найти ушедшую ветку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский