Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];

Вниз

Выход из выполняющегося 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
10-1120807425
L_Vic
2005-07-08 11:23
2006.06.18
Не могу получить в Delphi методы листа Excel


1-1147463679
Kostromich
2006-05-12 23:54
2006.06.18
Анализ содержимого выбраной директории


2-1148800931
Хочу_все_знать
2006-05-28 11:22
2006.06.18
Как очистить файл который используется


3-1145891342
linx
2006-04-24 19:09
2006.06.18
Запретить чтение ячейки данных в таблице


3-1145967793
Express
2006-04-25 16:23
2006.06.18
TDBGrid - номер текущей записи и всего записей в таблице





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