Для того чтобы использовать неявную загрузку модуля, достаточно описать
процедуры и функции этого модуля, которые вы будете задействовать в сво-
ем приложении (лучше сделать это в отдельном модуле unit). Такое описа-
ние состоит из имени функции (процедуры), под которым она будет ис-
пользована в приложении, зарезервированного слова external, строки с име-
нем файла библиотеки DLL, зарезервированного слова name и строки,
содержащей имя функции (процедуры) в динамическом модуле. Следующий
программный код содержит такое описание.
Описание внешних процедур и функций модуля DLL в приложении
function CreateWord_DLL:boolean;
external 'dserver.dll' name 'CreateWord';
function VisibleWord_DLL(kod_:boolean):boolean;
external 'dserver.dll' name 'VisibleWord';
function AddDoc_DLL(filename_:string):variant;
external 'dserver.dll' name 'AddDoc';
function FindAllAndPasteTextDoc_DLL(document:variant; findtext_,
pastetext_:string):booiean;
external 'dserver.dll' name 'FindAllAndPasteTextDoc';
function OpenDoc_DLL(file_:string):variant;
external 'dserver.dll' name 'OpenDoc';
function CopyTextDocToClipboard_DLL(document:variant):boolean;
external 'dserver.dll' name 'CopyTextDocToClipboard';
function ImportTextFromDoc_DLL(document:variant):string;
external 'dserver.dll1 name 'ImportTextFromDoc';
function CloseDocEx_DLL(document:variant;saved_:boolean):boolean;
external 'dserver.dll' name 'CloseDocEx';
function CloseWord_DLL:boolean; external 'dserver.dll' name 'CloseWord';
Если модуль DLL откомпилирован, размещен на диске компьютера и дос-
тупен приложению, а описание процедур и функций этого модуля в исполь-
зующем его приложении не содержит ошибок, то приложение запустится
без проблем. Тогда во время запуска приложения также будет загружен ди-
намический модуль. Если файл DLL не доступен приложению, которое его
использует и загружает неявно, то загрузка приложения вызовет ошибку.
Если в модуле отсутствует функция, описываемая в приложении, то это
также вызовет ошибку (рис. 17.5 и 17.6).
Рис. 17.5. Ошибка загрузки модуля DLL
Рис. 17.6. Ошибка при отсутствии в модуле DLL функции, описанной в приложении
Достоинство метода неявной загрузки модуля DLL заключается в простоте
его использования. Недостаток метода проявляется во время загрузки при-
ложения на выполнение, если описания функций (процедур) в приложении
и модуле не совпадают. Для решения этой проблемы приходится или
корректировать исходный текст приложения или исправлять ошибки в мо-
дуле DLL.
Используем созданную библиотеку в приложении Delphi.
Создание документа на основе шаблона (неявная загрузка модуля)
procedure TForml.Button8Click(Sender: TObject);
begin
// Создаем новый документ по шаблону
document:=AddDoc_DLL(ExtractFileDir(Application.ExeName)+
'\Шаблон конверта.dot');
messagebox(handle,'Шаблон почтового конверта создан!','Внимание!',О);
// Подставляем адрес
FindAllAndPasteTextDoc_DLL(document,'###индекс&', '350049');
FindAllAndPasteTextDoc_DLL(document,'###адрес&',
'Краснодар, ул. Севастопольская, д. 3, кв. 123');
FindAllAndPasteTextDoc_DLL(document,'###получатель&',
'Иванов Иван Иванович');
// Обратный адрес
FindAllAndPasteTextDoc_DLL(document,'###обратный индекс&','198005');
FindAllAndPasteTextDoc_DLL(document,'###обратный адрес&',
'Санкт-Петербург, Измайловский пр., д. 29, кв. 111');
FindAllAndPasteTextDoc_DLL(document,'##Отправитель&',
'Петрова Светлана Ивановна');
end;
В большинстве случаев более удобно использовать явную, или динамиче-
скую загрузку модуля DLL. Это связано с тем, что даже если будут измене-
ны некоторые функции модуля, то на загрузке приложения это никак не
отразится. Не будут выполняться только те функции и процедуры, которые
были ошибочно изменены. |