Главная страница
    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.01 c
3-1145888783
linx
2006-04-24 18:26
2006.06.18
Изоляция транзакции


1-1146845274
Grihan
2006-05-05 20:07
2006.06.18
String to Date


1-1147537027
varfolomey
2006-05-13 20:17
2006.06.18
Баг с клавой


11-1127844554
_Beginner_
2005-09-27 22:09
2006.06.18
Как перетягивать форму без заголовка?


4-1142933233
StudentVNN
2006-03-21 12:27
2006.06.18
Неработает завершение сеанса ExitWindowsEx(EWX_LOGOFF, 0)





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