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

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

DLL_PROCESS_DETACH - не ловится... :(


ecm ©   (2004-12-03 14:00:00) 

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 в доп. модуле...
Но все-равно интересно...должно же работать..:(


Digitman   (2004-12-03 16:06:00) [1]


> А как это вернуть 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;


ecm   (2004-12-03 15:47:00) [2]

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

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


ecm   (2004-12-03 15:09:00) [3]

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


ecm   (2004-12-03 14:57:00) [4]

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


ecm   (2004-12-03 14:55:00) [5]

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


iva   (2004-12-03 14:55:00) [6]

отправил


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

а куда слать?


ecm   (2004-12-03 14:50:00) [8]

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


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

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


iva   (2004-12-03 14:46:00) [10]

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


iva   (2004-12-03 14:40:00) [11]

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


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

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


ecm   (2004-12-03 14:38:00) [13]

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


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

фффффф DLL_PROCESS_ATTACH


iva   (2004-12-03 14:36:00) [15]

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


ecm   (2004-12-03 14:35:00) [16]

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


iva   (2004-12-03 14:33:00) [17]

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

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


Digitman   (2004-12-03 14:28:00) [18]


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


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


ecm   (2004-12-03 14:26:00) [19]

D6


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

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


Наверх

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