Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема выгрузки DLL [D6, D7, WinXP]


Страницы:   1 2

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


см. Игоря.
и слушай сюда.
в Трее висит одна (или более) иконка.
процесс, "влупивший" ее в Трей, не получает никаких извещений.
в АП этого процесса фигурирует образ хук-модуля, "ыгрузка" которого является сабжем.
отсюда резюме - в этом самом процессе (точнее - в оном из его трэдов) должно "произойти" то самое "событие", на которое "нацелен" тот самый "хук"


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо