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

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

Dll, dll, dll.... [Win2k, WinXP]


Страницы:   1 2

Alive ©   (2004-07-08 12:35:00) 

Привет всем!

В свой DLL-ке я замещаю процедуру DllProc своей. Скажите мне, пожалуйста, почему не вызывается DLLProc с "ризоном" DLL_PROCESS_DETACH при явной выгрузке моей библиотеки из другой программы через FreeLibrary (Естественно я заранее ее туда "динамически" загрузил).
Какие идеи, мб кто-нибудь уже занимался этим сабжем? Как вообще определить, что моя DLL выгружается из адресного пространства другого процесса, не используя DllProc?


bar   (2004-07-09 10:24:00) [21]

>>Alive ©
DLL_PROCESS_ATTACH = 1; // Программа подключается к DLL
DLL_THREAD_ATTACH = 2;  // Поток программы подключается к DLL
DLL_THREAD_DETACH = 3;  // Поток "оставляет" DLL
DLL_PROCESS_DETACH = 0; // Exe "отсоединяется" от DLL
подробней см
http://delphiworld.narod.ru/base/threads_and_dll.html


Digitman   (2004-07-09 08:25:00) [22]


> Alive ©   (09.07.04 07:28) [5]


убери stdcall !!


Alive   (2004-07-09 07:33:00) [23]


> 1)TaskManager+ TaskManagerEx
> 2)Попробовать переименовать файл дллки (ежели занят, то
> не получится).
> 3)Использовать спец. проги для вывода инфы о процессах и
> т.п. гдето слышал о такой хорошей ,но не помню. Поищи в
> инете.

Не то! Мне нужно вызвать определенную процедуру в моей длл-ке, когда она будет выгружаться...

И вообще: если DLL подгружена в разные процессы, то DLL_PROCESS_DETACH будет вызываться всегда, когда хотя бы один процесс "освободит" DLL, или только когда необходимость в DLL отпадет совсем, т.е. когда она не будет загружена ни одним процессом? Понимаю, что первый вариант, так SDK написано...


Alive   (2004-07-09 07:28:00) [24]

......

procedure DLLEntryPoint(dwReason: DWORD); stdcall;
begin
 case dwReason Of
   DLL_PROCESS_ATTACH :
     begin
       MessageBox(0, PChar('DLL_PROCESS_ATTACH'), PChar('DLL'), MB_TOPMOST);
     end;
   DLL_PROCESS_DETACH:
     begin
       MessageBox(0, PChar('DLL_PROCESS_DETACH'), PChar('DLL'), MB_TOPMOST);
     end
 end;
end;

begin
 DLLProc := @DLLEntryPoint;
 DLLEntryPoint(DLL_PROCESS_ATTACH);
end.

Вот код, на ATTACH работает, при загрузке, а при выгрузке нет!


Digitman   (2004-07-08 16:09:00) [25]

убери stdcall


bar   (2004-07-08 15:45:00) [26]

Получение списка DLL загруженных приложением  
http://delphiworld.narod.ru/base/get_loaded_dll_list.html


bar   (2004-07-08 15:23:00) [27]

>>Alive ©   (08.07.04 12:35)  
Я делаю примерно та и все работает.
....
procedure DLLEntryPoint(dwReason: DWord); stdcall;
begin
   case dwReason of
       DLL_PROCESS_ATTACH: OpenGlobalData;
       DLL_PROCESS_DETACH: CloseGlobalData;
   end;
end;

exports ...;

begin
   DLLProc := @DLLEntryPoint;
   DLLEntryPoint(DLL_PROCESS_ATTACH);
end.

>>Как вообще определить, что моя DLL выгружается из адресного пространства другого процесса, не используя DllProc?

1)TaskManager+ TaskManagerEx
2)Попробовать переименовать файл дллки (ежели занят, то не получится).
3)Использовать спец. проги для вывода инфы о процессах и т.п. гдето слышал о такой хорошей ,но не помню. Поищи в инете.


Digitman   (2004-07-08 12:47:00) [28]


> Alive ©   (08.07.04 12:35)  


быть того не может

покажи код


Страницы:   1 2

Наверх

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