Главная страница
    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.035 c
9-1097331098
borrman
2004-10-09 18:11
2005.01.23
Алгоритм поиска слов в игре Балда


1-1105430034
JohnS
2005-01-11 10:53
2005.01.23
Как заглушить вывод ошибки на экран


9-1097124544
Megabyte-ceercop
2004-10-07 08:49
2005.01.23
Карта с нелинейными тайлами.


1-1105445771
tolstiak
2005-01-11 15:16
2005.01.23
Как сделать RadioGroup многострочным?


3-1103355036
Evyshka
2004-12-18 10:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский