![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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?