ВУЗ:
Составители:
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 ) возвращает ссыл-
Страницы
- « первая
- ‹ предыдущая
- …
- 2
- 3
- 4
- 5
- 6
- …
- следующая ›
- последняя »