Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > выгрузка DLL с хуком


Автор: ScrewDriver 6.1.2005, 15:13
Подскажите пжалуста, как выгрузить библиотечку с хуком, выхожу из вызвавшей DLL проги - библиотека не выгружается. Висит в памяти до перезагрузки! Мож кто сталкивался с такой проблемой - помогите.

Автор: xAnejl 6.1.2005, 15:24
У меня все выгружалось, кинь код на форум, посмотрим

Автор: _hunter 6.1.2005, 15:29
ты хук отцепляеш?

Автор: RA 6.1.2005, 16:48
Цитата(ScrewDriver @ 6.1.2005, 15:13)
Висит в памяти до перезагрузки!

Мне кажется такого быть не может.

Автор: _hunter 6.1.2005, 16:52
почему не может?
у меня такое было smile

Автор: Леша 6.1.2005, 23:50
Если хук остановить, то дэ-эл-эл"ка висит в памяти еще некоторое время... Например, нельзя заново ее скомпилить... Этот вопрос меня тоже волнует. (Надеюсь никто не в обиде из модеров что не создал новую тему...) Но вот чтобы до перезагрузки... Нет так не бывает...

Автор: _hunter 6.1.2005, 23:53
почему не бывает? библиотека висит пока хук висит, а хук висит пока его не снимут. а если не снимают -- то как раз до перезагрузки библиотека висеть и будет

Автор: Леша 7.1.2005, 21:43

Повторяюсь:
Цитата
Если хук остановить, то дэ-эл-эл"ка висит в памяти еще некоторое время...


И все-таки. Мне порой приходилось очень долго ждать прежде чем перекомпилть дллку... А это убивает время на тестинг... Кто знает выход?

Автор: RA 7.1.2005, 22:46
Цитата(_hunter @ 6.1.2005, 16:52)
почему не может?
у меня такое было


Интересный касяк. А при этом dll работала? (ну в смысле выполняла свои обязанности),
или просто как мусор в памяти осталась? и ещё это в XP?



Вот у меня тут предположение появилось из-за чего длл себя неправильно ведёт.
Быть может это связанно с использованием WaitForSingleObject

Автор: _hunter 8.1.2005, 00:05
Леша, еще ра з повторюсь: а хук отцепил?

RAdmin, что значит работала? функции из нее нормально экспортировались; просто с отцеплением косяки были ( как раз из-за оставленного хука )

Автор: ScrewDriver 8.1.2005, 12:09
library ms;

uses
WinTypes, WinProcs, Messages;


var
SaveExitProc : Pointer;
HookHandle : hHook;

function MH(Code: integer; wParam: word; lParam: Longint): Longint; export; stdcall;
var
tl : ^MSG;
begin

if Code >= 0 then
begin
tl := Pointer(lParam);

...
...
...

Result:=0;
end
else
Result := CallNextHookEx(HookHandle,Code, wParam, lParam);

end;

procedure LocalExitProc;
begin
if HookHandle<>0 then
begin
UnhookWindowsHookEx(HookHandle);
ExitProc := SaveExitProc;
end;
end;

exports
MH;

begin

HookHandle := SetWindowsHookEx(WH_GETMESSAGE, @MH, hInstance, 0);
if HookHandle = 0 then
MessageBox(0, 'Unable to set hook!', 'Error', mb_Ok)
else begin
SaveExitProc := ExitProc;
ExitProc := @LocalExitProc;
end;

end.


Вот моя либа :-)
Вродь все отцепил...
Да, вот еще, как я понимаю, библиотека должна загружаться по первому вызову импортируемой функции (У мя просто - pointer := @MH) но она загружается когда ГРУЗИТСЯ проект или УСТАНАВЛИВАЕТСЯ (install) NT сервис, если она из сервиса вызывается ессна.

как бороться???

у мя WinXP Delphi6,7

Автор: ScrewDriver 8.1.2005, 12:13
висит я соврал - не до перезагрузки - до перелогинения (но не всегда иногда, редко, все-тки до перезагрузки - но енто имхо просто системный глюк).
Я даж делфю перезапускал - не помогает.

Автор: ScrewDriver 8.1.2005, 12:19
висит я соврал - не до перезагрузки - до перелогинения (но не всегда иногда, редко, все-тки до перезагрузки - но енто имхо просто системный глюк).
Я даж делфю перезапускал - не помогает.

Автор: Леша 8.1.2005, 14:37
Под Вашим, _hunter, "отцепил", я и имею в виду остановил... Или я уж совсем корявый термин использую, или Вы невнимательны.

И все же вопрос в силе?!

Автор: _hunter 9.1.2005, 01:52
понятно...

тогда еще вопрос: второй раз DllMain вызывается?

Автор: Леша 9.1.2005, 03:15
_hunter, нет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)