как принудительно предотвратить загрузку dll (ExitCode := 1)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
vic_75
незнакомец
Сообщения: 2
Зарегистрирован: 29.08.2010 14:55:33

как принудительно предотвратить загрузку dll (ExitCode := 1)

Сообщение vic_75 »

Добрый день.

На delphi прекрасно работает такой код
begin
DLLProc := @DLLMain;
DLLMain(DLL_PROCESS_ATTACH);
end.
..............................................
procedure DLLMain(Reason: DWORD);
begin
Case Reason Of
DLL_PROCESS_ATTACH :
begin // DLL_PROCESS_ATTACH
// if ..... then // какое-то условие
ExitCode := 1; //dll не будет загружаться
end; // DLL_PROCESS_ATTACH
End; //case
end;

В Free Pascal (использую 2.5.1)
ExitCode := 1 не работает

begin
DLLMain(DLL_PROCESS_ATTACH);
end.
...............................................
procedure DLLMain(Reason: DWORD);
begin
Case Reason Of
DLL_PROCESS_ATTACH :
begin // DLL_PROCESS_ATTACH
// if ..... then // какое-то условие
ExitCode := 1; //dll не будет загружаться
end; // DLL_PROCESS_ATTACH
End; //case
end;

Такое ощущение что ExitCode не используется при загрузке dll.
Как быть в подобной ситуации?
А.Н.
постоялец
Сообщения: 230
Зарегистрирован: 13.03.2010 11:23:58

Сообщение А.Н. »

begin
DLLProc := @DLLMain;
DLLMain(DLL_PROCESS_ATTACH);
end.

Не понял я где это. В DLL?

Такое ощущение что ExitCode не используется при загрузке dll.
Как быть в подобной ситуации?

1. Забыть про DllMain. Это дерьмовая штука.
2. Использовать для инициализации DLL отдельную функцию.
vic_75
незнакомец
Сообщения: 2
Зарегистрирован: 29.08.2010 14:55:33

Сообщение vic_75 »

Да уж.... Ответ А.Н. информативен до безобразия.....

Вообщем ничего лучшего как исправить родной system.pp (точнее syswin.inc)
и перекомпилировать RTL я не нашел.
А.Н.
постоялец
Сообщения: 230
Зарегистрирован: 13.03.2010 11:23:58

Сообщение А.Н. »

Ну, про DllMain много написано. Что уж тут ещё приписать-то? Лучше забыть про неё, по-моему.
Хм... Каждый раз, при обновлении среды, исправлять и перекомпилировать?
Ответить