Главная страница
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.49 MB
Время: 0.064 c
11-1128923897
shalex
2005-10-10 09:58
2006.06.18
Помогите с MCK


15-1148429089
_Hawk_
2006-05-24 04:04
2006.06.18
Шпион aka Trainer Spy


15-1148465605
Игорь Шевченко
2006-05-24 14:13
2006.06.18
Любителям изящной словесности


2-1149249027
XTD
2006-06-02 15:50
2006.06.18
Unsatisfied forward or external declaration: ????


2-1148893538
Mozgan
2006-05-29 13:05
2006.06.18
Защита файла от удаления