![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема выгрузки DLL [D6, D7, WinXP]
ScrewDriver © (2005-01-06 15:14:00)Подскажите пжалуста, как выгрузить библиотечку с хуком, выхожу из вызвавшей DLL проги - библиотека не выгружается. Висит в памяти до перезагрузки! Мож кто сталкивался с такой проблемой - помогите.
Japp (2005-01-12 14:50:00) [1]Разобрался!!!
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1102071646&n=5
Проблема из той же серии...
В Delphi6 без Update Pack (я тогда именно таким и пользовался)
DLL_PROCESS_DETACH - не вызывается! (вот я тормоз - надо же было
тогда проверить выгрузку!)
Japp (2005-01-12 14:31:00) [2]2Cobalt - Я не въехал...
Кто загружал? - Своя (почти - другой отдел писал) софтина и загружала...
На другие процессы хук не ставился, но шел интенсивный обмен по
WM_COPYDATA c вторым (своим же) процессом.
Выгрузка второго процесса ситуацию не меняла.
А почему нельзя поставить хук при загрузке?
MSDN, кажется, это не запрещает...
Eraser (2005-01-12 14:30:00) [3]Помню что, после выгрузки приложения использующего ДЛЛ - файл длл-ки нельзя было удалить с диска (записать сверху новую версию) до перезагрузки системы
Не обязательно перезагружать, она сама со временем выгрузиться. А это происходит из-за некорректного снятия хука (или некорректного вызова CallnextHook). Просканируй процесы ProcessExplorer'om (sysinternals.com)! У меня была подобная ситуация- то и дело находил свою DLL в памяти какой-нибудь проги!
PS Проверь ещё раз обработчик хука!
Cobalt (2005-01-12 13:54:00) [4]Ну, ставить хук при загрузке длл-ки - это мощно! ;)
Вот только вопрос - кто её загружал? И ставил ли ты хук из этой длл-ки на другие процессы?
Japp (2005-01-12 13:08:00) [5]
unit MainDLL;
....
var
...
Hook: HHOOK;
...
function HookMouse(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
begin
...
Result := CallNextHookEx(Hook,code,wParam,lParam);
end;
...
procedure DLLEntryPoint(Reason: Integer);
var
S: String;
begin
Case Reason of
DLL_PROCESS_ATTACH: begin
...
Hook := SetWindowsHookEx(7,HookMouse,hInstance,{GetCurrentThreadId()}0);
end;
DLL_PROCESS_DETACH: begin
UnhookWindowsHookEx(Hook);
...
end;
end;
end;
...
end.
Игорь Шевченко (2005-01-11 23:22:00) [6]Japp (11.01.05 18:56) [21]
Тогда не будем заниматься гаданием на кофейной гуще и плясками с бубном с неведомыми рунами, а подождем продуктивной информации.
Japp (2005-01-11 18:56:00) [7]Код щас найду (если найду - давно было дело)
А в чьей памяти - не скажу - не смотрел. Помню что, после выгрузки приложения использующего ДЛЛ - файл длл-ки нельзя было удалить с диска (записать сверху новую версию) до перезагрузки системы
Игорь Шевченко (2005-01-11 17:52:00) [8]В дополнение к [19] - в чьей памяти она оставалась висеть ?
Игорь Шевченко (2005-01-11 17:51:00) [9]
> Но либа все равно оставалась висеть в памяти после выгрузки
Код в студию.
kaZaNoVa (2005-01-11 17:49:00) [10]Удалено модератором
Japp (2005-01-11 17:42:00) [11]Удалено модераторомКласс! Такой содержательной ветки я еще не видел...
В том-то и дело что ловушка снималась по документации
через UnhookWindowsHookEx.. Но либа все равно оставалась висеть в памяти после выгрузки
kaZaNoVa (2005-01-11 17:04:00) [12]Удалено модератором
Digitman (2005-01-11 16:56:00) [13]Удалено модератором
kaZaNoVa (2005-01-11 16:47:00) [14]Удалено модератором
Kerk (2005-01-11 16:42:00) [15]Удалено модератором
kaZaNoVa (2005-01-11 16:40:00) [16]Удалено модератором
Kerk (2005-01-11 16:34:00) [17]Удалено модератором
Игорь Шевченко (2005-01-11 16:33:00) [18]Удалено модератором
kaZaNoVa (2005-01-11 16:25:00) [19]Удалено модератором
Digitman (2005-01-11 15:50:00) [20]
> kaZaNoVa
см. Игоря.
и слушай сюда.
в Трее висит одна (или более) иконка.
процесс, "влупивший" ее в Трей, не получает никаких извещений.
в АП этого процесса фигурирует образ хук-модуля, "ыгрузка" которого является сабжем.
отсюда резюме - в этом самом процессе (точнее - в оном из его трэдов) должно "произойти" то самое "событие", на которое "нацелен" тот самый "хук"