Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.18;
Скачать: CL | DM;

Вниз

Выход из выполняющегося DLL   Найти похожие ветки 

 
DillerXX ©   (2006-05-09 18:02) [0]

У меня есть длл которую загружает процесс. Как сделать так, чтобы прекратилось выполнение моего кода, длл выгрузилась из памяти процесса, тоесть чтобы файл длл можно было удалять, и ещё чтобы не пострадал сам процесс? Заранее спасибо.


 
AlexanderMS ©   (2006-05-09 18:19) [1]

Чтобы самому выгружать DLL из программы, нужно использовать явную их загрузку.
Например,

...
Var
 DLLHandle : THandle;
...
DLLHandle := LoadLibrary("SomeDLL.DLL");
if DLLHandle = 0 then ; {библиотека не загрузилась}

@sa := getProcAddress(DLLHandle, "somefunction") {загрузка функции}

FreeLibrary(DLLHandle);


 
DillerXX ©   (2006-05-09 18:26) [2]

Нет, я спрашивал как это всё сделать работая из ДЛЛ а не из ехе.


 
Leonid Troyanovsky ©   (2006-05-09 18:26) [3]


> DillerXX ©   (09.05.06 18:02)  

>  и ещё чтобы не пострадал сам процесс? Заранее спасибо.


FreeLibraryAndExitThread

--
Regards, LVT.


 
AlexanderMS ©   (2006-05-09 18:28) [4]

Забыл указать:

type
TFn = объявление функции или процедуры; stdcall;
...
Var
DLLHandle : THandle;
SA : TFn;
...
DLLHandle := LoadLibrary("SomeDLL.DLL");
if DLLHandle = 0 then ; {библиотека не загрузилась}

@sa := getProcAddress(DLLHandle, "name") {загрузка функции или процедуры}
...
FreeLibrary(DLLHandle);


 
DillerXX ©   (2006-05-09 18:48) [5]


> FreeLibraryAndExitThread

Я вызываю FreeLibraryAndExitThread(hInstance, 0)  из длл, но у меня завершается и процесс в том числе :( если вызывать из длл halt то процесс не завершается, но файл остаётся недоступен.. :(


 
Юрий Зотов ©   (2006-05-09 18:56) [6]

Когда DLL хочет выгрузиться, она через PostMessage посылает в Exe любое подходящее сообщение. Получив его, Exe выгружает DLL.


 
DillerXX ©   (2006-05-09 19:05) [7]


> Когда DLL хочет выгрузиться, она через PostMessage посылает
> в Exe любое подходящее сообщение. Получив его, Exe выгружает
> DLL.

А подскажите какое сообщение надо отсылать а то найти не могу?


 
jack128 ©   (2006-05-09 19:08) [8]

DillerXX ©   (09.05.06 19:05) [7]
А подскажите какое сообщение надо отсылать а то найти не могу?

своё сообщение.   WM_UNLOADLIBRARY = WM_USER + 134;


 
jack128 ©   (2006-05-09 19:08) [9]

и вручную в exe обработать это сообщение


 
DillerXX ©   (2006-05-09 19:09) [10]

А если ехе не мой? :(


 
jack128 ©   (2006-05-09 21:20) [11]

DillerXX ©   (09.05.06 19:09) [10]
А если ехе не мой? :(

гм..  Бред конечно, да и проверять на работоспособность лень, но: выделяешь память, в эту память помещаешь код, который бы освобождал dll, а потом запускаешь поток, потоковой функцией которого - будет тот самый участок памяти. В итоге получишь небольшой мемлик, но зато коректно освобождишь dll.


 
jack128 ©   (2006-05-09 21:22) [12]

блин, бред говорю.  Запускаешь поток и в нем вызываешь FreeLibraryAndExitThread. Эта функция как раз джля таких ситуаций и создана.


 
DiamondShark ©   (2006-05-10 12:55) [13]

А что это за постановка такая интересная?

Чтобы "выйти из ДЛЛ" надо выйти из вызванной функции, уж простите за банальность. ;)

А выгружать ДЛЛ не извстно кем, не известно как и неизвестно зачем загруженную -- это антисемитизм.

откуда такая необходимость вообще взялась?



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

Текущий архив: 2006.06.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
4-1142884196
Anonim
2006-03-20 22:49
2006.06.18
GetShortPathName


5-1133515534
Tonich
2005-12-02 12:25
2006.06.18
TDateTimePicker


15-1148273694
Ega23
2006-05-22 08:54
2006.06.18
С Днём рождения! 22 мая (настоящее)


2-1149058692
Zhekson
2006-05-31 10:58
2006.06.18
почему ValInt := StrToInt( 1 ); выдаёт EConvertError


2-1148901797
delphi
2006-05-29 15:23
2006.06.18
Создание СОМ...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский