Форум: "Основная";
Текущий архив: 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