Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

DLL_PROCESS_DETACH - не ловится... :(   Найти похожие ветки 

 
ecm ©   (2004-12-03 14:00) [0]

library Project1;

uses
 Windows;
 
procedure Dummy; stdcall;
begin
end;

exports
 Dummy;

{$R *.res}
procedure DllEntryPoint(Reason: Integer);
begin
 Case Reason of
   //DLL_PROCESS_ATTACH: asm int 3 end;
   DLL_PROCESS_DETACH: asm int 3 end;
 end;
end;

begin
 DLLProc := @DllEntryPoint;
 DllProc(DLL_PROCESS_ATTACH);
end.


Пробовал грузить и динамически (LoadLibrary) - в ветку DLL_PROCESS_DETACH - никогда не попадаю!
Пока выкрутил через finalization в доп. модуле...
Но все-равно интересно...должно же работать..:(


 
iva ©   (2004-12-03 14:20) [1]

Какая версия Delphi?


 
ecm ©   (2004-12-03 14:26) [2]

D6


 
Digitman ©   (2004-12-03 14:28) [3]


> Пробовал грузить и динамически (LoadLibrary) - в ветку DLL_PROCESS_DETACH
> - никогда не попадаю!


с какого перепуга-то DLL_PROCESS_DETACH будет при LoadLibrary() ?
при LoadLibrary() (явном или неявном) будет DLL_PROCESS_ATTACH.
а DLL_PROCESS_DETACH будет либо при явном FreeLibrary() (когда сч-к ссылок = 0) либо если обработчик DLL_PROCESS_ATTACH вернул код возврата не равный нулю.


 
iva ©   (2004-12-03 14:33) [4]

Была такая проблема и тоже на 6-ке (без сервиспака).
Лечится двумя способами:
1 - установкой SP
2 - исправлением ошибки в system.pas и перекомпиляцией. Иправленный system.dcu ложишь (или кладешь :-)) в каталог своего проекта и строишь свой проект.

ситуация описана на сайте Borland, ссылку не помню.


 
ecm ©   (2004-12-03 14:35) [5]

Есстесвенно при FreeLibrary и не вызывается - я ж не садист :)
А как это вернуть 0 в процедуре? (как написано в хелпе к DllProc). Или надо делать integer-функцию?


 
iva ©   (2004-12-03 14:36) [6]

Digitman, конечно, прав. Речь, наверное, идет о DLL_PROCESS_DETACH


 
iva ©   (2004-12-03 14:38) [7]

фффффф DLL_PROCESS_ATTACH


 
ecm ©   (2004-12-03 14:38) [8]

2 iva: в system.pas или в SysInit.pas? Потому как все манипуляции с DllProc и стартовый код либы именно в SysInit.pas


 
ecm ©   (2004-12-03 14:39) [9]

2 ALL:
У меня при выгрузке либы (любым способом загруженной) DllEntryPoint вообще не вызывается...


 
iva ©   (2004-12-03 14:40) [10]

мне приходилось таскать system.dcu пока не поставил SP


 
iva ©   (2004-12-03 14:46) [11]

могу выслать, проверишь.


 
ecm ©   (2004-12-03 14:47) [12]

Вышли плз System.pas & SysInit.pas ....


 
ecm ©   (2004-12-03 14:50) [13]

Токо адрес поправь... <@...> замени на собаку - а то спамеры одолевают :)


 
iva ©   (2004-12-03 14:54) [14]

а куда слать?


 
iva ©   (2004-12-03 14:55) [15]

отправил


 
ecm ©   (2004-12-03 14:55) [16]

Наведи мышку на мой ник - увидишь ecm<@ntiSpam>ua.fm


 
ecm ©   (2004-12-03 14:57) [17]

Сенкс - изучаю...


 
ecm ©   (2004-12-03 15:09) [18]

Да .. с твоей версией System.dcu - все сразу заработало.
Хотя System.pas и SysInit.pas у меня были такими же как и присланные...
Делфи 6 (build 6.163)


 
ecm ©   (2004-12-03 15:47) [19]

Для интересующихся...
Вылечил и без сервис-пака: - пересобрал системные модули. Для чего выполнил следующее:
1) В папке Source\Rtl создал подкаталог Lib - Source\Rtl\Lib
2) Находясь в Source\Rtl запустил make
3) Взял System.dcu из Source\Rtl\Lib

Все полученные модули в Source\Rtl\Lib оказались немного большего размера чем родные из <DelphiDir>\Lib...
Странно все это...


 
Digitman ©   (2004-12-03 16:06) [20]


> А как это вернуть 0 в процедуре? (как написано в хелпе к
> DllProc). Или надо делать integer-функцию?


const DLL_INIT_FAIL = 1;

procedure DllEntryPoint(Reason: Integer);
begin
Case Reason of
  DLL_PROCESS_ATTACH:
    begin
..
     if какие-то ошибки/проблемы при иниц-ции then
       ExitCode := DLL_INIT_FAIL;
    end;
  DLL_PROCESS_DETACH:
    begin
..
    end;
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.041 c
1-1105616059
Demir
2005-01-13 14:34
2005.01.23
ComObj?


14-1104901142
YurikGL
2005-01-05 07:59
2005.01.23
Бреш в файрволлах!!!


1-1105485353
chir
2005-01-12 02:15
2005.01.23
Запретить снятие фокуса


1-1105608718
Саня
2005-01-13 12:31
2005.01.23
Сеанс MS-DOS


4-1102355599
mefisto
2004-12-06 20:53
2005.01.23
Передать программе параметры?