Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.041 c
1-1105439083
Ega23
2005-01-11 13:24
2005.01.23
Breakpoint - мистика какая-то...


4-1101736313
Dema-X
2004-11-29 16:51
2005.01.23
как по handle определить, какому приложению принадлежит окно


1-1104847433
BoAlSe
2005-01-04 17:03
2005.01.23
Деактивация


6-1099136025
Diaskhan
2004-10-30 15:33
2005.01.23
Ошибка в Win98 при определении IP-adressa


14-1104667326
Чеширский_Кот
2005-01-02 15:02
2005.01.23
Андрей Шевченко привез "Золотой мяч" в Киев





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский