Форум: "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.48 MB
Время: 0.052 c