автоматизация
Автоматизация (ранее известная как OLE-автоматизация) позволяет одному приложению управлять объектами, реализованными в другом приложении, или выделять объекты для управления.
Сервер автоматизации — это приложение (тип COM-сервера), предоставляющее свои функции через COM-интерфейсы другим приложениям, называемым клиентами автоматизации. Это позволяет клиентам автоматизировать некоторые функции путем прямого доступа к объектам и использования предоставляемых ими возможностей.
Серверы и клиенты автоматизации используют COM-интерфейсы, которые всегда являются производными от IDispatch
, и принимают и возвращают определенный набор типов данных, называемых типами автоматизации. Предоставив методы и свойства, доступные из других приложений, можно автоматизировать любой объект, который позволяет обращаться к интерфейсу автоматизации. Автоматизация доступна для OLE- и COM-объектов. Автоматизированный объект может быть локальным или удаленным (на другом компьютере, доступном по сети), поэтому существует две категории автоматизации.
Автоматизация (локальная).
Удаленная автоматизация (через сеть с использованием DCOM).
Предоставление доступа к объектам полезно в том случае, когда приложения предлагают функциональные возможности, полезные для других приложений. Например элемент управления ActiveX — это тип сервера автоматизации. Приложение, в котором размещается элемент управления ActiveX, является клиентом автоматизации этого элемента управления.
Другой пример: текстовый процессор может предоставлять свои функции по проверке орфографии другим программам. Благодаря доступу к объектам поставщики способны совершенствовать свои приложения с помощью готовых функциональных возможностей других приложений. Таким образом, автоматизация применяет некоторые принципы объектно-ориентированного программирования, такие как возможность многократного использования и инкапсуляции, на уровне самих приложений.
Особое значение имеет поддержка, предоставляемая автоматизацией пользователям и поставщикам решений. За счет доступа к функциональным возможностям приложений через стандартный и четко определенный интерфейс автоматизации позволяет создавать комплексные решения на одном общем языке программирования, например Visual Basic, а не прибегать к различным связанным с конкретными приложениями макроязыкам.
Многие коммерческие приложения, например Microsoft Excel и Microsoft Visual C++, допускают автоматизацию большей части своих функциональных возможностей. Например, в Visual C++, можно написать макросы VBScript для автоматизации построений, аспектов редактирования кода или задач отладки.
Передача параметров в автоматизации
Одна из сложностей при создании методов автоматизации заключается в обеспечении согласованного безопасного механизма для передачи данных между серверами и клиентами автоматизации. Для передачи данных автоматизация использует тип VARIANT . Тип VARIANT является помеченным объединением. У него есть элемент данных для значения (это анонимное объединение C++) и элемент данных, указывающий тип сведений, хранящихся в объединении. Тип VARIANT поддерживает ряд стандартных типов данных: 2- и 4-байтовые целые числа, 4- и 8-байтовые числа с плавающей запятой, строки и логические значения. Кроме того, она поддерживает типы HRESULT (коды ошибок OLE), CURRENCY (числовый тип фиксированной точки) и DATE (абсолютные даты и время), а также указатели на IUnknown
интерфейсы и IDispatch
интерфейсы.
Тип VARIANT инкапсулирован в класс COleVariant . Поддерживаемые классы CURRENCY и DATE инкапсулированы в классы COleCurrency и COleDateTime .
Примеры автоматизации
AUTOCLIK Используйте этот пример, чтобы освоить приемы автоматизации и изучить основы удаленной автоматизации.
ACDUAL Добавляет сдвоенные интерфейсы в приложение сервера автоматизации.
CALCDRIV Приложение клиента автоматизации для реализации MFCCALC.
INPROC Демонстрирует приложение внутрипроцессного сервера автоматизации.
CALCDRIV Приложение клиента автоматизации для реализации INPROC.
MFCCALC Демонстрирует приложение клиента автоматизации.