![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выход из выполняющегося 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);