У недоверчивого читателя может возникнуть
У недоверчивого читателя может возникнуть вопрос — а зачем городить такие сложности, если можно просто использовать код в секции инициализации? Дело в том, что этот код выполняется только при запуске DLL. Поэтому, как, например, вовремя уничтожить создаваемые в библиотеке объекты при завершении ее работы? Для этого можно использовать функцию обратного вызова:
Листинг 28.4. Создание и удаление объекта при загрузке и выгрузке динамической библиотеки DataCheck .
...
(Часть исходного кода опущена (см. листинг 24.2)}
exports
IsValidlnt,
IsValidDate index 1,
IsValidTime index 2 name 'ValidTime',
type TSomeObject = class(TObject)
Fieldl: String; end; var FirstObj: TSomeObject;
procedure DLLEntryPoint(Reason: Word);
begin
case Reason of DLL_PROCESS_ATTACH:
begin
FirstObj := TSomeObject.Create; FirstObj.Fieldl := 'Объект создан'; ShowMessage(FirstObj.Fieldl);
end;
DLL__PROCESS_DETACH: FirstObj . Free;
DLL_THREAD_ATTACH: ShowMessage('Создан новый поток'); DLL_THREAD_DETACH:;
end;
end;
begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
При завершении работы динамической библиотеки вызывается процедура, на которую указывает адрес, содержащийся в переменной ExitProc:
var ExitProc: Pointer;
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий