Распределенные приложения: контроллеры автоматизации. Часть 2. Фертиков В.В. - 4 стр.

UptoLike

Составители: 

4
тификаторы свойств и методов, типы параметров и т. п . После этого клиент по-
лучает возможность динамически генерировать запросы к объекту.
Важнейшей задачей клиента, использующего IDispatch, является мар -
шалинг параметров запросов. Напомним , что маршалинг (упаковка параметров
для пересылки между процессами) обычного COM-интерфейса с виртуальной
таблицей выполняется заместителем и заглушкой (proxy, stub). В данном же
случае клиент сам обязан выполнить упаковку параметров для метода диспин -
терфейса в некую стандартную форму, называемую вариантом (variant), а так -
же распаковку из варианта результатов вызова, возвращенных методом. Ва-
риант определяет стандартную форму представления каждого параметра и
идентификатор типа параметра для всех типов, используемых Visual Basic: ко-
роткое целое, длинное целое, строка символов и т. д . Программисты на других
языках поэтому должны использовать лишь известные Visual Basic типы .
Позднее связывание через диспинтерфейс клиента на Delphi
Чтобы исполнить метод диспинтерфейса, клиент должен создать экземп-
ляр соответствующего объекта, получить правильный идентификатор метода,
упаковать корректные параметры в вариант и вызвать метод с помощью интер -
фейса IDispatch. Помимо этого, возможно, клиенту потребуется дополни-
тельно обратиться за информацией о типе используемого объекта: имена и
идентификаторы свойств и методов, типы параметров и т. п. для производства
динамического вызова. После возврата результат вызова клиент должен кор-
ректно распаковать из варианта, в соответствии с той же информацией о типе.
Программист на Delphi избавлен от необходимости реализации подробностей
перечисленных механизмов. Почти все они инкапсулируются внутренним ти-
пом Variant.
Переменные типа Variant, помимо всего прочего, можно использовать
для обращения к объектам автоматизации. Чтобы иметь такую возможность,
необходимо включить ссылку на модуль ComObj из одного из ваших модулей ,
программы или библиотеки:
uses ComObj;
Когда вариант ссылается на такой объект, можно через вариант вызывать
методы объекта, а также считывать или записывать свойства. При этом синтак -
сис обращения к внешнему объекту достаточно очевиден: конструкции похожи
на используемые при работе с обычными (внутренними) объектами. Основное
отличие заключается в том, что вызовы методов объекта автоматизации связы -
ваются во время выполнения и не требуют никаких предыдущих объявлений
метода. Проверка правильности этих вызовов во время компиляции не прово-
дится.
Следующий пример иллюстрирует вызовы метода автоматизации. Фраг -
мент запустит программу Microsoft Word и сохранит в файле документ из двух
строк . Функция CreateOleObject (определенная в ComObj) возвращает ссыл-
                                     4
тификаторы свойств и методов, типы параметров и т.п. После этого клиент по-
лучает возможность динамически генерировать запросы к объекту.
     Важнейшей задачей клиента, использующего IDispatch, является мар-
шалинг параметров запросов. Напомним, что маршалинг (упаковка параметров
для пересылки между процессами) обычного COM-интерфейса с виртуальной
таблицей выполняется заместителем и заглушкой (proxy, stub). В данном же
случае клиент сам обязан выполнить упаковку параметров для метода диспин-
терфейса в некую стандартную форму, называемую вариантом (variant), а так-
же – распаковку из варианта результатов вызова, возвращенных методом. Ва-
риант определяет стандартную форму представления каждого параметра и
идентификатор типа параметра для всех типов, используемых Visual Basic: ко-
роткое целое, длинное целое, строка символов и т.д. Программисты на других
языках поэтому должны использовать лишь известные Visual Basic типы.

     Позднее связывание через диспинтерфейс клиента на Delphi
     Чтобы исполнить метод диспинтерфейса, клиент должен создать экземп-
ляр соответствующего объекта, получить правильный идентификатор метода,
упаковать корректные параметры в вариант и вызвать метод с помощью интер-
фейса IDispatch. Помимо этого, возможно, клиенту потребуется дополни-
тельно обратиться за информацией о типе используемого объекта: имена и
идентификаторы свойств и методов, типы параметров и т.п. – для производства
динамического вызова. После возврата результат вызова клиент должен кор-
ректно распаковать из варианта, в соответствии с той же информацией о типе.
Программист на Delphi избавлен от необходимости реализации подробностей
перечисленных механизмов. Почти все они инкапсулируются внутренним ти-
пом Variant.
     Переменные типа Variant, помимо всего прочего, можно использовать
для обращения к объектам автоматизации. Чтобы иметь такую возможность,
необходимо включить ссылку на модуль ComObj из одного из ваших модулей,
программы или библиотеки:
uses ComObj;

      Когда вариант ссылается на такой объект, можно через вариант вызывать
методы объекта, а также считывать или записывать свойства. При этом синтак-
сис обращения к внешнему объекту достаточно очевиден: конструкции похожи
на используемые при работе с обычными (внутренними) объектами. Основное
отличие заключается в том, что вызовы методов объекта автоматизации связы-
ваются во время выполнения и не требуют никаких предыдущих объявлений
метода. Проверка правильности этих вызовов во время компиляции не прово-
дится.
      Следующий пример иллюстрирует вызовы метода автоматизации. Фраг-
мент запустит программу Microsoft Word и сохранит в файле документ из двух
строк. Функция CreateOleObject (определенная в ComObj ) возвращает ссыл-