Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выход из выполняющегося DLL [D7, WinXP]


DillerXX ©   (2006-05-09 18:02:00) 

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


DiamondShark   (2006-05-10 12:55:00) [1]

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

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

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

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


jack128   (2006-05-09 21:22:00) [2]

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


jack128   (2006-05-09 21:20:00) [3]

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

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


DillerXX   (2006-05-09 19:09:00) [4]

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


jack128   (2006-05-09 19:08:00) [5]

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

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


jack128   (2006-05-09 19:08:00) [6]

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


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


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

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


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

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


DillerXX   (2006-05-09 18:48:00) [9]


> FreeLibraryAndExitThread

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


AlexanderMS   (2006-05-09 18:28:00) [10]

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

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:26:00) [11]

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


Leonid Troyanovsky   (2006-05-09 18:26:00) [12]


> DillerXX ©   (09.05.06 18:02)  

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


FreeLibraryAndExitThread

--
Regards, LVT.


AlexanderMS   (2006-05-09 18:19:00) [13]

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

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

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

FreeLibrary(DLLHandle);


Наверх

Титульная страница Поиск, карта сайта Написать письмо