Главная страница
    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.01 c
2-1149108787
Nonamers
2006-06-01 00:53
2006.06.18
ShellExecute


15-1148561342
Petr V. Abramov
2006-05-25 16:49
2006.06.18
не запускается BDE-приложение


2-1148876092
lobach
2006-05-29 08:14
2006.06.18
Реестр


2-1149159277
koha
2006-06-01 14:54
2006.06.18
CreateProcess


15-1148327115
evdiscovery
2006-05-22 23:45
2006.06.18
[работа] требуется программист Delphi на удаленную работу





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