Вы можете создавать, собирать, распространять и обращаться к серверам автоматизации (Automation servers) в Visual FoxPro.
Создание серверов автоматизации
Вы можете создавать сервера автоматизации в виде OLE public классов, определенных вами в программных файлах (.prg) или в файлах библиотек визуальных классов (.vcx). Вы можете иметь в проекте приложения любое количество классов OLE public.
Сборка серверов автоматизации
После создания сервера автоматизации, вы можете собрать его в виде компоненты out-of-process или в виде компоненты in-process. Компонента out-of-process представляет собой исполнимый файл (.exe), который запускается в своем собственном процессе. Компонента in-process представляет собой файл dynamic-link library (.dll), который запускается в том же самом адресном пространстве, что и вызвавший его клиент. Общение между приложением клиента и сервером, собранным в виде исполнимого файла, называется межпроцессным (cross-process).
Когда вы собираете сервер автоматизации в виде исполнимого файла (.exe), вы не теряете никакой функциональности обычного исполнимого файла. Вы можете запускать исполнимый файл, обеспечивать интерфейс пользователя, а также любую функциональность, доступную для приложений. В доолнение к этому, вы расширяете возможности вашего приложения, позволяя другим приложениям использовать функциональности, заложенные в вашем сервере автоматизации.
При сбоке серверов автоматизации имейте ввиду следующее:
-
Сервера In-process могут быть быстрее потому, что в этом случае нет издержек, связанных с межпроцессным общением.
-
Серверы Out-of-process могут быть развернуты на удаленных машинах, тогда как серверы in-process не могут.
-
Сервер in-process и клиент совместно используеют одно и то же адресное пространство и любая серъезная ошибка в in-process сервере прерывает работу клиента. Ошибки, случившиеся в out-of-process сервере прерывают работу только самого сервера.
Сборка сервера автоматизации создает три файла:
-
Файл .exe или .dll.
-
Файл библиотеки типов (.tlb).
Файл библиотеки типов представляет собой бинарный файл, в котором перечислены все опубликованные классы вашего сервера автоматизации, наряду с их свойствами, методыми и событиями. Обозреватели OLE объекта читают эту информацию и представляют ее в читабельном интерфейсе. Для получения более подробной информации смотрите Сборка библоитек типов .
-
Файл регистрации (.vbr)
Файл регистрации перечисляет глобальные уникальные идентификаторы (GUID) классов в вашем сервере.
Замечание
Файл регистрации .vbr представляет собой тот же файл, что и файл регистрации .reg за исключением того, что файл .vbr не включает в себя жестко прописанных путей.
Распространение серверов автоматизации Visual FoxPro
Когда вы распространяете сервер автоматизации (.dll), вы должны включить в дистрибутив перечисленные ниже файлы:
-
VFPVersionNumberR.dll или VFPVersionNumberT.dll, где VersionNumber представляет собой номер версии выпуска Visual FoxPro.
-
VFPVersionNumberRENU.dll
-
GDIPlus.dll
-
MSVCR70.dll
Если вы распространяете сервер автоматизации в виде исполнимого файла (.exe) то прочитайте условия, описанные в статье Подготовка к распространению приложений. Для получения более подробной информации о библиотеках run-time, прочитайте Библиотека VFP9R.DLL Run-Time и Библиотека VFP9T.DLL Run-Time.
Обращение к сервервам автоматизации Visual FoxPro
Любое приложение, которое может создать объекты автоматизации, может создать объекты,
основанные на вашем сервере автоматизации, установить свойства, которые не были объявлены, как HIDDEN или
PROTECTED, и вызывать методы. Например, предположим, что ваш сервер имеет имя
foxole
и содержит класс с именемperson
с методом
GetName. Приведенный ниже может быть запущен в Visual FoxPro:
![]() | |
---|---|
oTest = CREATEOBJECT("foxole.person") cName = oTest.GetName() |
Аналогичный код мог бы быть запущен и в Microsoft Excel или Visual Basic:
![]() | |
---|---|
Set oTest = CreateObject("foxole.person") cName$ = oTest.GetName() |
Обработка ошибок в серверах автоматизации Visual FoxPro
Единственным способом взаимодействия с объектами, предоставляемыми серверами автоматизации является взаимодействие, основанное на методах и свойствах выказываемых сервером классов. Когда клиентское приложение вызывает метод объекта и в сервере автоматизации происходит ошибка, метод либо возвращает значение ошибки или поднимает ошибку на уровень клиентского приложения.
Клиентское приложение решает - либо предупредить пользоватеья или продолжить работу по другому пути. Сервер автоматизации, сам по себе, никогда не взаимодействует с пользователем. Это позволяет размещению сервера быть прозрачным по отношению к клиентскому приложению. Сервер автоматизации может быть локальным, запущенным на компьютере пользователя или может использовать свойство Visual FoxPro Remote Automation, позволяющее запускать его на сетевом сервере.
Когда сервер автоматизации Visual FoxPro генерирует ошибку, то сервер устанавливает объект COM ErrorInfo с помощью IErrorInfo и прекращает исполнение текущего метода. Клиент автоматизации может либо высвободить из памяти сервер автоматизации, или, если клиент имеет доступ к объекту COM ErrorInfo, обработать исключение на основе полученной информации. Для получения более подробной информации смотрите _ErrorInfo( ) API Library Routine.
Функция COMRETURNERROR() обрабатывает ошибки, которые случаются в сервере автоматизации. Вы можете использовать COMRETURNERROR() в методе Error, для заполнения структуры COM исключения информацией, которую клиент автоматизации может использовать для определения источника ошибок сервера автоматизации. Для получения более подробной информации смотрите описание функции COMRETURNERROR().