Обзор других пунктов меню
Пункт меню Options | Project
Applications
Directories/Conditionals
Конфигурация среды программирования
В данной статье рассказывается как :
- Добавлять и удалять формы и модули в проект
- Управлять окнами на рабочем пространстве
- Создавать выполняемый файл для Windows
- Тонко настроить среду программирования
Проект Delphi
Любой проект имеет, по-крайней мере, шесть файлов, связанных с ним. Три из них относятся к управлению проектом из среды и напрямую программистом не меняются. Вот эти файлы :
- Главный файл проекта, изначально называется PROJECT1.DPR.
- Первый модуль программы /unit/, который автоматически появляется в начале работы. Файл называется UNIT1.PAS по умолчанию, но его можно назвать любым другим именем, вроде MAIN.PAS.
- Файл главной формы, который по умолчанию называется UNIT1.DFM, используется для сохранения информации о внешнем виде главной формы.
- Файл PROJECT1.RES содержит иконку для проекта, создается автоматически.
- Файл, который называется PROJECT1.OPT по умолчанию, является текстовым файлом для сохранения установок, связанных с данным проектом. Например, установленные Вами директивы компилятора сохраняются здесь.
- Файл PROJECT1.DSK содержит информацию о состоянии рабочего пространства.
Разумеется, если сохранить проект под другим именем, то изменят название и файлы с расширением RES, OPT и DSK.
Привязка программы к железу Delphi. Часть 1
После компиляции программы получаются файлы с расширениями:
DCU — скомпилированные модули
EXE — исполняемый файл
DSM — служебный файл для запуска программы в среде, очень большой, рекомендуется стирать его при окончании работы.
~PA, ~DP — backup файлы Редактора.
Пункт меню “File”
Если нужно сохранить проект, то Вы выбираете пункт главного меню “File” (с помощью мышки или по клавише Alt+F). Пункт меню “File” выглядит следующим образом:
Save Project As
Как Вы можете видеть, здесь есть шесть секций; вот их назначение:
- Первая секция дает возможность управления проектом вцелом.
- Вторая секция дает контроль над формами, модулями и компонентами проекта.
- Третья позволяет добавлять и удалять файлы из проекта.
- Четвертая управляет печатью.
- Пятая секция — выход из Delphi
- Шестая секция предоставляет список ранее редактировавшихся проектов; Вы можете быстро открыть нужный.
Как Вы увидите позже, большинство операций из пункта меню “File” можно выполнить с помощью Менеджера Проекта (Project Manager), который можно вызвать из пункта меню View. Некоторые операции доступны и через SpeedBar. Данная стратегия типична для Delphi: она предоставляет несколько путей для решения одной и той же задачи, Вы сами можете решать, какой из них более эффективен в данной ситуации.
Каждая строка пункта меню “File” объяснена в Справочнике. Выберите меню “File” и нажмите F1, появится экран справочника, как на рис.1.
урок на Делфи — 39. Открыть чужую программу
Рис.1: Delphi включает подсказку, как использовать пункт меню “File”.
Большинство из пунктов первой секции очевидны. “New Project” начинает новый проект, “Open Project” открывает существующий проект и т.д.
Первые два пункта второй секции позволяют Вам создать новую форму или новый модуль. Выбирая “New Form”, Вы создаете новую форму и модуль, связанный с ней; выбирая “New Unit”, Вы создаете один модуль.
“New Component” вызывает диалог для построения заготовки нового визуального компонента. В результате создается модуль, который можно скомпилировать и включить в Палитру Компонент.
“Open File” открывает при необходимости любой модуль или просто текстовый файл. Если модуль описывает форму, то эта форма тоже появится на экране.
При создании нового модуля Delphi дает ему имя по-умолчанию. Вы можете изменить это имя на что-нибудь более осмысленное (например, MAIN.PAS) с помощью пункта “Save File As“.
“Save File” сохраняет только редактируемый файл, но не весь проект.
“Close File” удаляет файл из окна Редактора.
Нужно обратить внимание: Вы должны регулярно сохранять проект через File | Save Project либо через нажатие Ctrl+S.
Управление проектом
Теперь, когда Вы знаете о создании проекта с помощью пункта меню “File”, перейдем к Менеджеру Проектов, который помогает управлять проектом. Менеджер Проектов, рис.3, разделен на две части. Верхняя — панель с управляющими кнопками. Нижняя — список модулей, входящих в проект.
Рис.3: Кнопки сверху используются для удаления и добавления модулей в проект.
Вы можете использовать кнопки с плюсом и минусом для добавления и удаления файлов в проекте. Эти изменения влияют на файлы с исходным текстом, то есть, если добавить в проект модуль, то ссылка на него появится в файле с расширением DPR.
Краткое описание других кнопок :
- Третья слева кнопка — просмотр текста модуля, на котором стоит курсор.
- Четвертая — просмотр формы, если есть таковая для данного модуля
- Пятая — вызов диалога настройки проекта, сам диалог будет рассмотрен позже.
- Последняя — сохранение изменений на диске.
Обзор других пунктов меню
Пункт меню “File” обсуждался ранее. Далее рассматриваются другие важные пункты — “Edit”, “Search”, “View” и “Compile”, но менее подробно. Далее, снова подробно, рассказывается о “Options”.
- Пункт меню “Edit”
- “Edit” содержит команды “Undo” и “Redo”, которые могут быть очень полезны при работе в редакторе для устранения последствий при неправильных действиях, например, если случайно удален нужный фрагмент текста. Отметьте для себя, что Справочник (on-line help) объясняет как нужно использовать пункт меню Options | Environment для настройки команды “Undo”. Возможность ограничить возможное количество команд “Undo” может пригодиться, если Вы работаете на машине с ограниченными ресурсами. Команды “Cut”, “Copy”, “Paste” и “Delete” — как во всех остальных приложениях Windows, но их можно применять не только к тексту, но и к визуальным компонентам. “Bring To Front”, “Send To Back”, “Align” и “Size” обсуждались в Уроке № 2. Оставшиеся четыре пункта помогают быстро “приукрасить” внешний вид формы.
- Пункт меню “Menu”
- В “Search” есть команда “Find Error” (поиск ошибки), которая поможет отследить ошибку периода выполнения программы. Когда в сообщении об ошибке указан ее адрес, Вы можете выбрать пункт меню Search | Find Error и ввести этот адрес. Если это представится возможным, то среда переместит Вас в то место программы, где произошла ошибка.
- Пункт меню “View”
Составляющие пункта меню “View”:
- Project Manager (Менеджер Проекта).
- Project Source — загружает главный файл проекта (DPR) в Редактор
- Установка, показывать или нет Object Inspector на экране.
- Установка, показывать или нет Alignment Palette. То же самое доступно из пункт меню Edit | Align.
- Browser — вызов средства для просмотра иерархии объектов программы, поиска идентификатора в исходных текстах и т.п.
- Watch, Breakpoint и Call Stack — связаны с процедурой отладки программы и будут обсуждаться позднее.
- Component List — список компонент, альтернатива Палитре Компонент. Используется для поиска компонента по имени или при отсутствии мыши.
- Window List — список окон, открытых в среде Delphi.
- Toggle Form/Unit, Units, Forms — переключение между формой и соответствующим модулем, выбор модуля или формы из списка.
- New Edit Window — открывает дополнительное окно Редактора. Полезно, если нужно, например, просмотреть две разных версии одного файла.
- SpeedBar и Component Palette — установки, нужно ли их отображать.
- Пункт меню “Compile”
- В пункте меню “Compile” проект можно скомпилировать (compile) или перестроить (build). Если выбрать Compile или Run, то Delphi перекомпилирует только те модули, которые изменились со времени последней компиляции. Build all, с другой стороны, перекомпилирует все модули, исходные тексты которых доступны. Команда Syntax Check только проверяет правильность кода программы, но не обновляет DCU файлы. В самом низу — пункт Information, который выдает информацию о программе: размеры сегментов кода, данных и стека, размер локальной динамической памяти и количество скомпилированных строк.
- Пункт меню “Run”
Можно использовать “Run” для компиляции и запуска программы и для указания параметров командной строки для передачи в программу. Здесь же имеются опции для режима отладки.
Пункт меню Options | Project
“Options” наиболее сложная часть системного меню. Это центр управления, из которого вы можете изменять установки для проекта и для всей рабочей среды Delphi. В “Options” есть семь пунктов:
Первые четыре пункта вызывают диалоговые окна. Ниже приведено общее описание пункта меню “Options”:
- Project — выбор установок, которые напрямую влияют на текущий проект, это могут быть, к примеру, директивы компилятора проверки стека (stack checking) или диапазона (range checking).
- Environment — конфигурация самой среды программирования (IDE). Например, здесь можно изменить цвета, используемые в Редакторе.
- Tools — позволяет добавить или удалить вызов внешних программ в пункт главного меню “Tools”. Например, если Вы часто пользуетесь каким-нибудь редактором или отладчиком, то здесь его вызов можно добавить в меню.
- Gallery — позволяет определить специфические установки для Эксперта Форм и Эксперта Проектов и их “заготовок”. Эксперты и “заготовки” предоставляют путь для ускорения конструирования интерфейса программы.
- Последние три пункта позволяют сконфигурировать Палитру Компонент.
Диалог из пункта Options | Project включает пять страниц:
- На странице Forms перечислены все формы, включенные в проект; Вы можете указать, нужно ли автоматически создавать форму при старте программы или Вы ее создадите сами.
- На странице Application Вы определяете элементы программы такие, как заголовок, файл помощи и иконка.
- Страница Compiler включает установки для генерации кода, управления обработкой ошибок времени выполнения, синтаксиса, отладки и др.
- На странице Linker можно определить условия для процесса линковки приложения
- Страница Directories/Conditionals — здесь указываются директории, специфичные для данного проекта.
После предыдущего абзаца с общим описанием, каждая страница описана детально в отдельной главе.
Все установки для проекта сохраняются в текстовом файле с расширением OPT и Вы можете вручную их исправить.
Страница Directories/Conditionals, рис.8, дает возможность расширить число директорий, в которых компилятор и линковщик ищут DCU файлы.
Рис.8: Страница Directories/Conditionals.
В файле DELPHI.INI содержится еще один список директорий. Запомните, что в OPT файле — список директорий для конкретного проекта, а в файле DELPHI.INI — список относится к любому проекту.
Output directory — выходная директория, куда складываются EXE и DCU файлы, получающиеся при компиляции.
Search path — список директорий для поиска DCU файлов при линковке. Директории перечисляются через точку с запятой ;
Conditional defines — для опытного программиста и на первом этапе создания проекта не требуется. Для информации можно вызвать Справочник (on-line help).
Конфигурация среды программирования (IDE)
Пункт меню “Options | Environment” предоставляет Вам большой набор страниц и управляющих элементов, которые определяют внешний вид и работу IDE. Delphi позволяет сделать следующие важные настройки:
- Определить, что из проекта будет сохраняться автоматически.
- Можно менять цвета IDE.
- Можно менять подсветку синтаксиса в Редакторе.
- Можно изменить состав Палитры Компонент.
- Указать “горячие клавиши” IDE.
Первая страница пункта меню “Options | Environment” показана на рис.9
Рис.9: Страница Preferences.
В группе “Desktop Contents” определяется, что будет сохраняться при выходе из Delphi. Если выбрать Desktop Only — это сохранит информацию о директориях и открытых окнах, если выбрать Desktop And Symbols — это сохранит то же самое плюс информацию для броузера (browser).
В группе “Autosave” указывается, что нужно сохранять при запуске программы. Если позиция Editor Files выбрана, то сохраняются все модифицированные файлы из Редактора при выполнении команд Run|Run, Run|Trace Into, Run|Step Over, Run|Run To Cursor или при выходе из Delphi. Если позиция Desktop выбрана — сохраняется рабочая среда при закрытии проекта или при выходе из Delphi. Если Вы позже откроете проект, то он будет иметь тот же вид, что и при его закрытии.
В группе “Form Designer” можно установить, показывать ли сетку (grid) на экране и выравнивать ли объекты по ней, и размер ячеек сетки.
В группе “Debugging”: опция Integrated Debugging — использовать ли встроенный отладчик; Step Program Block — отладчик остановится на первой строке модуля, в котором есть отладочная информация; Break On Exception — останавливать ли программу при возникновении исключительной ситуации; Minimize On Run — свертывать ли Delphi при запуске программы. После закрытия программы среда Delphi восстанавливается. Hide Designers On Run — прячет окна Дизайнера (Инспектор Объектов, формы) при запуске приложения.
Show Compiler Progress — показывать ли окно, в котором отражается процесс компиляции программы.
“Gallery” — указывает, в каких случаях нужно предоставлять “галерею” (коллекцию заготовок и экспертов).
Страницы Editor Options, Editor Display и Editor Colors позволяют Вам изменить цвета и “горячие” клавиши, используемые IDE. Страница Editor Display показана на рис.10, а Editor Colors — на рис.11.
Рис.10: Страница Editor Display.
Рис.11: Страница Editor Colors.
Существует несколько способов изменить назначение “горячих” клавиш, используемых Редактором. Например, многие пользователи привыкли, что по клавише F5 максимизируется окно Редактора. Для этого им надо использовать расположение клавиш, называемое “Classic” (Keystroke mapping : Classic). Всего есть четыре вида конфигурации клавиш:
- “Default” — характерно для Microsoft. Если Вы новичок в Windows или уже привыкли к этому расположению клавиш, то это подойдет.
- “Classic” — более известно ветеранам Borland C++ и Borland Pascal. Поддерживает многие комбинации клавиш WordStar и отладчик управляется старым добрым способом.
- Остальные два вида — имитируют редакторы Epsilon и BRIEF. Подойдут, если вы с ними знакомы.
Точное описание назначения клавиш можно найти в Справочнике (в Help | Topic Search набрать “key mapping”).
Цвета IDE можно изменить на странице Editor Colors.
И, наконец, Editor Options (рис.12).
Рис.12: На странице Editor Options можно настроить тонкие детали работы Редактора.
Многие из установок на данной странице не очень важны для большинства пользователей, поэтому остановимся лишь на некоторых.
“Use syntax highlight” — выделять ли цветом синтаксические конструкции в Редакторе Исходного текста.
“Find text at cursor” — если включено, то при поиске (Ctrl+F) в качестве подстроки для поиска будет браться то слово, на котором стоит курсор.
Обо всех опциях можно подробнее узнать в Справочнике (F1).
Установки сохраняются в файле DELPHI.INI, который находится в директории Windows.
Источник: www.helloworld.ru
Библиотека классов VCL среды проектирования Delphi. Приложения и диалоги
Аннотация: В лекции рассматривается процесс создания приложений, структура модулей, построение MDI-приложений, применение модальных и немодальных диалогов. Изучается создание и использование DLL-библиотек, статическое и динамическое подключение DLL-библиотек.
Создание приложений
Проекты
Любое приложение в среде проектирования Delphi создается как некоторый проект. В зависимости от типа приложения, в проект входит различный набор файлов проекта. Но в любом случае составной частью проекта является файл проекта с расширением DPR.
Каждая форма в проекте представляется двумя файлами: файл модуля с расширением PAS и файл описания формы с расширением DFM . Файл описания формы не может редактироваться непосредственно, данные в него заносятся средой проектирования. В каждый проект входит один главный файл приложения. Для диалоговых приложений этот файл начинается с ключевого слова program. Файл модуля для формы начинается ключевым словом unit.
Для создания нового приложения среда проектирования Delphi предоставляет большой набор шаблонов приложений, включающий приложение-диалог, SDI -приложение и MDI -приложение.
Основное отличие автоматически формируемого макета приложения на базе шаблона MDI -приложения от применения шаблона SDI -приложения заключается в поддержке одновременной работы с несколькими документами. Каждый новый документ открывается в создаваемом дочернем окне.
Дополнительно шаблон MDI -приложения содержит кнопки для изменения расположения окон, а в меню Windows добавляются имена всех открытых документов.
Создание MDI-приложения
При использовании шаблона MDI -приложения создается проект, состоящий из трех модулей (main.pas, childwin.pas, about.pas) и главного файла приложения.
Для главной формы приложения (main.pas) свойство FormStyle будет установлено равным fsMDIForm , а для дочерней формы (childwin.pas) — fsMDIChild .
Класс главной формы приложения определяется следующим кодом:
type TMainForm = class(TForm) MainMenu1: TMainMenu; File1: TMenuItem; FileNewItem: TMenuItem; FileOpenItem: TMenuItem; FileCloseItem: TMenuItem; Window1: TMenuItem; Help1: TMenuItem; N1: TMenuItem; FileExitItem: TMenuItem; WindowCascadeItem: TMenuItem; WindowTileItem: TMenuItem; WindowArrangeItem: TMenuItem; HelpAboutItem: TMenuItem; OpenDialog: TOpenDialog; FileSaveItem: TMenuItem; FileSaveAsItem: TMenuItem; Edit1: TMenuItem; CutItem: TMenuItem; CopyItem: TMenuItem; PasteItem: TMenuItem; WindowMinimizeItem: TMenuItem; StatusBar: TStatusBar; ActionList1: TActionList; EditCut1: TEditCut; EditCopy1: TEditCopy; EditPaste1: TEditPaste; FileNew1: TAction; FileSave1: TAction; FileExit1: TAction; FileOpen1: TAction; FileSaveAs1: TAction; WindowCascade1: TWindowCascade; WindowTileHorizontal1: TWindowTileHorizontal; WindowArrangeAll1: TWindowArrange; WindowMinimizeAll1: TWindowMinimizeAll; HelpAbout1: TAction; FileClose1: TWindowClose; WindowTileVertical1: TWindowTileVertical; WindowTileItem2: TMenuItem; ToolBar2: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; ToolButton5: TToolButton; ToolButton6: TToolButton; ToolButton9: TToolButton; ToolButton7: TToolButton; ToolButton8: TToolButton; ToolButton10: TToolButton; ToolButton11: TToolButton; ImageList1: TImageList; procedure FileNew1Execute(Sender: TObject); procedure FileOpen1Execute(Sender: TObject); procedure HelpAbout1Execute(Sender: TObject); procedure FileExit1Execute(Sender: TObject); end;
Листинг 25.1.
В коде модуля main.pas должно быть указано использование двух других модулей приложения: uses ChildWin, About ;.
Процедура создания нового документа или открытия существующего реализована следующим кодом:
procedure TMainForm.FileNew1Execute(Sender: TObject); begin CreateMDIChild(‘NONAME’ + IntToStr(MDIChildCount + 1)); end; procedure TMainForm.FileOpen1Execute(Sender: TObject); begin if OpenDialog.Execute then CreateMDIChild(OpenDialog.FileName); end; procedure TMainForm.CreateMDIChild(const Name: string); var Child: TMDIChild; begin < Класс TMDIChild определен в модуле CHILDWIN.PAS >Child := TMDIChild.Create(Application); Child.Caption := Name; if FileExists(Name) then // Дочернее окно содержит поле типа TMemo, в которое // выполняется загрузка текстового файла: Child.Memo1.Lines.LoadFromFile(Name); end; Для завершения приложения выполняется следующая процедура: procedure TMainForm.FileExit1Execute(Sender: TObject); begin Close; end; В модуле childwin.pas находится код дочерней формы: type TMDIChild = class(TForm) Memo1: TMemo; procedure FormClose(Sender: TObject; var Action: TCloseAction); end; implementation procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end.
Листинг 25.2.
Главная форма приложения описывается следующими свойствами (полужирным шрифтом и курсивом выделены свойства, значения которых не могут быть другими):
object MainForm: TMainForm Caption = ‘Приложение с MDI-интерфейсом’ FormStyle = fsMDIForm Menu = MainMenu1 WindowMenu = Window1 object StatusBar: TStatusBar AutoHint = True Panels = <> SimplePanel = True end object ToolBar2: TToolBar Images = ImageList1 object ToolButton9: TToolButton Action = FileNew1 end object ToolButton1: TToolButton Action = FileOpen1 end . end object MainMenu1: TMainMenu Images = ImageList1 object File1: TMenuItem Caption = ‘ New’ OnExecute = FileNew1Execute end object FileOpen1: TAction Category = ‘File’ Caption = ‘ stdcall;
Различные способы передачи параметров определяют порядок их передачи (слева направо или справа налево), а также указывают, кто будет освобождать память стека (вызываемая или вызывающая процедура).
Для того чтобы функцию, описанную в DLL-библиотеке, можно было вызвать из другого приложения, эту функцию следует экспортировать. Список всех экспортируемых функций указывается в секции exports через запятую и завершается символом «точка с запятой».
Экспорт функций может выполняться тремя способами:
- по имени функции, используемому в DLL-библиотеке;
- по имени функции, заданному как имя экспорта;
- по присвоенному функции индексу (указанному в секции exports).
library Project1; uses SysUtils, Classes; function F1(X: Integer): Integer; stdcall; begin F1:=X*2; end; function F2(X: Integer): Integer; stdcall; begin F2:=X*X; end; exports F1 , F2 index 2 ; end.
DLL-библиотека не является выполняемым модулем, поэтому для получения dll-файла достаточно произвести компиляцию проекта.
Источник: intuit.ru
Как открыть программу созданную в delphi
Вспомним процесс программирования в DOS. Преобразование исходного текста программы в машинный код включал в себя два процесса — компиляцию и линковку. В процессе линковки, редактор связей, компоновавший отдельные модули программы, помещал в код программы не только объявления функций и процедур, но и их полный код. Вы готовили таким образом одну программу, другую, третью . И везде код одних и тех же функций помещался в программу полностью (см. рис 1).
Программа1 Программа2 : : MyFunc(:) MyFunc(:) : : код функции MyFunc код функции MyFunc код других функций код других функций
Рис.1 : Вызов функций при использовании статической компоновки
В многозадачной среде такой подход был бы по меньшей мере безрассудным, так как очевидно, что огромное количество одних и тех же функций, отвечающих за прорисовку элементов пользовательского интерфейса, за доступ к системным ресурсам и т.п. дублировались бы полностью во всех приложениях, что привело бы к быстрому истощению самого дорогого ресурса — оперативной памяти. В качестве решения возникшей проблемы, еще на UNIX-подобных платформах была предложена концепция динамической компоновки (см. рис . 2).
Рис.2: Вызов функций при использовании динамической компоновки
Но, чем же отличаются Dynamic Link Library (DLL) от обычных приложений? Для понимания этого требуется уточнить понятия задачи (task), экземпляра (копии) приложения (instance) и модуля (module).
При запуске нескольких экземпляров одного приложения, Windows загружает в оперативную память только одну копию кода и ресурсов — модуль приложения, создавая несколько отдельных сегментов данных, стека и очереди сообщений (см. рис. 3), каждый набор которых представляет из себя задачу, в понимании Windows. Копия приложения представляет из себя контекст, в котором выполняется модуль приложения.
Рис.3 : Копии приложения и модуль приложения
DLL — библиотека также является модулем. Она находится в памяти в единственном экземпляре и содержит сегмент кода и ресурсы, а также сегмент данных (см. рис. 4).
Рис.4 : Структура DLL в памяти
DLL — библиотека, в отличие от приложения не имеет ни стека, ни очереди сообщений. Функции, помещенные в DLL, выполняются в контексте вызвавшего приложения, пользуясь его стеком. Но эти же функции используют сегмент данных, принадлежащий библиотеке, а не копии приложения.
В силу такой организации DLL, экономия памяти достигается за счет того, что все запущенные приложения используют один модуль DLL, не включая те или иные стандартные функции в состав своих модулей.
Часто, в виде DLL создаются отдельные наборы функций, объединенные по тем или иным логическим признакам, аналогично тому, как концептуально происходит планирование модулей ( в смысле unit ) в Pascal. Отличие заключается в том, что функции из модулей Pascal компонуются статически — на этапе линковки, а функции из DLL компонуются динамически, то есть в run-time.
Создание DLL в Delphi (экспорт)
Для программирования DLL Delphi предоставляет ряд ключевых слов и правил синтаксиса. Главное — DLL в Delphi такой же проект как и программа.
Рассмотрим шаблон DLL:
library MyDll; uses ; exports < экспортируемые функции>begin end.
Имя файла проекта для такого шаблона должно быть MYDLL.DPR.
. К сожалению, в IDE Delphi автоматически генерируется только проект программы, поэтому Вам придется проект DLL готовить вручную. В Delphi 2.0 это неудобство устранено.
Как и в программе, в DLL присутствует раздел uses. Инициализационная часть необязательна. В разделе же exports перечисляются функции, доступ к которым должен производится из внешних приложений.
- по номеру (индексу);
- по имени.
В зависимости от этого используется различный синтаксис:
procedure ExportByOrdinal; export; begin . end; exports ExportByOrdinal index 10; procedure ExportByName; export; begin . end; exports ExportByName name ‘MYEXPORTPROC’;
Так как в Windows существует понятие «резидентных функций» DLL, то есть тех функций, которые находятся в памяти на протяжении всего времени существования DLL в памяти, в Delphi имеются средства для организации и такого рода экспорта:
exports ExportByName name ‘MYEXPORTPROC’ resident;
Стоит отметить тот факт, что поиск функций, экспортируемых по индексу, производится быстрее, чем при экспорте по имени. С другой стороны, экспорт по имени удобнее, особенно если Вы периодически дополняете и расширяете набор экспортируемых из DLL функций, при гарантии работы приложений, использующих DLL, и не хотите специально следить за соблюдением уникальности и соответствия индексов.
Если же Вы будете экспортировать функции следующим образом:
exports MyExportFunc1, MyExportFunc2, . ;
то индексирование экспортируемых функций будет произведено Delphi автоматически, а такой экспорт будет считаться экспортом по имени, совпадающему с именем функции. Тогда объявление импортируемой функции в приложении должно совпадать по имени с объявлением функции в DLL. Что же касается директив, накладываемых уже на импортируемые функции, то об этом мы поговорим ниже.
Использование DLL в Delphi (импорт)
Для организации импорта, т.е. доступа к функциям, экспортируемым из DLL, так же как и для их экспорта, Delphi предоставляет стандартные средства.
Для показанных выше примеров, в Вашей программе следует объявить функции, импортируемые из DLL таким образом:
< импорт по специфицированному имени >procedure ImportByName;external ‘MYDLL’ name ‘MYEXPORTPROC’; < импорт по индексу >procedure ImportByOrdinal; external ‘MYDLL’ index 10; < импорт по оригинальному имени >procedure MyExportFunc1; external ‘MYDLL’;
Этот способ называется статическим импортом.
Как Вы могли заметить, расширение файла, содержащего DLL, не указывается — по умолчанию подразумеваются файлы *.DLL и *.EXE. Как же тогда быть в случае, если файл имеет другое расширение (например, как COMPLIB.DCL в Delphi), или если требуется динамическое определение DLL и импортируемых функций (например, Ваша программа работает с различными графическими форматами, и для каждого из них существует отдельная DLL.)?
Для решения такого рода проблем Вы можете обратиться напрямую к API Windows, используя, так называемый, динамический импорт:
. Синтаксические диаграммы объявлений экспорта/импорта, подмена точки выхода из DLL, и другие примеры, Вы можете найти в OnLine Help Delphi, Object Pascal Language Guide, входящему в Borland RAD Pack for Delphi, и, например, в книге «Teach Yourself Delphi in 21 Days».
Если не говорить о генерируемом компилятором коде (сейчас он более оптимизирован), то все правила синтаксиса остались те же , что и в Borland Pascal 7.0
DLL, использующие объекты VCL для работы с данными
При создании своей динамической библиотеки Вы можете использовать вызовы функций из других DLL. Пример такой DLL есть в поставке Delphi (X:DELPHIDEMOSBDBDEDLL). В эту DLL помещена форма, отображающая данные из таблицы и использующая для доступа к ней объекты VCL (TTable, TDBGrid, TSession), которые, в свою очередь, вызывают функции BDE.
Как следует из комментариев к этому примеру, для такой DLL имеется ограничение: ее не могут одновременно использовать несколько задач. Это вызвано тем, что объект Session, который создается автоматически при подключении модуля DB, инициализируется для модуля, а не для задачи. Если попытаться загрузить эту DLL вторично из другого приложения, то возникнет ошибка. Для предотвращения одновременной загрузки DLL несколькими задачами нужно осуществить некоторые действия. В примере — это процедура проверки того, используется ли DLL в данный момент другой задачей.
Исключительные ситуации в DLL
Возникновение исключительной ситуации в DLL, созданной в Delphi, приведет к прекращению выполнения всего приложения, если эта ситуация не была обработана внутри DLL. Поэтому желательно предусмотреть все возможные неприятности на момент разработки DLL. Можно порекомендовать возвращать результат выполнения импортируемой функции в виде строки или числа и, при необходимости, заново вызывать исключительную ситуацию в программе.
function MyFunc : string; begin try except on EResult: Exception do Result:=Format(DllErrorViewingTable, [EResult.Message]); else Result := Format(DllErrorViewingTable, [‘Unknown error’]); end; end;
Код в программе:
StrResult:=MyFunc; if StrResult<>» then raise Exception.Create(StrResult);
Источник: citforum.ru