ВУЗ:
Составители:
6
в целях маршалинга, и можно эффективно обращаться к ним , используя под -
программы VarArrayLock и VarArrayUnlock.
Рассматривая приведенные примеры , можно задать вопрос, каким обра-
зом имена объектов (например , Word.Basic) или методов (в данном случае ,
FileNew, Insert и FileSaveAs) транслируются в уникальные идентификато-
ры? Если не будет обеспечен данный механизм , невозможным станет связыва-
ние в режиме выполнения. Прежде всего, рассмотрим наш пример так называе -
мого программного идентификатора (programmatic identifier или сокращенно
ProgID) « Word.Basic» . Программный идентификатор – это удобный синоним
уникального идентификатора класса CLSID. Напомним , что в модели COM
класс объекта идентифицирует определенную реализацию объекта или груп-
пы интерфейсов. Отображение удобочитаемого ProgID в CLSID содержится в
реестре – оно помещается туда при установке программы Word на компьютер .
Таким образом, любой клиент, вызвав CreateOleObject с ProgID в качестве
параметра, запустит соответствующий сервер автоматизации.
Что касается идентификаторов методов и свойств, то соответствующая
информация связывания может быть получена клиентом из библиотеки типа
или же путем обращения непосредственно к объекту через IDispatch. Напри-
мер , метод IDispatch::GetIDsOfNames специально предназначен для этих
целей : он возвращает идентификатор метода или свойства диспинтерфейса в
ответ на запрашиваемое клиентом имя. Данный второй способ в свое время был
разработан группой Visual Basic и является наиболее простым, хотя и не самым
эффективным. Именно он используется встроенным типом Variant Delphi для
производства позднего связывания.
Еще один важный вопрос: где программист может получить сведения о
реализуемых сервером объектах автоматизации? В данном случае наиболее ве-
роятный источник информации для рассматриваемого примера – интерактивная
справочная система Microsoft Word с полным списком объектов в этом прило-
жении, которые можно использовать для автоматизации, их методов и свойств
и вообще всего, что необходимо для обращения к их сервисам . В общем случае
приложения, предоставляющие сервисы через автоматизацию , содержат весьма
подробную документацию на сей счет .
Учебный пример клиента Microsoft Word
Одной из необходимых функций большинства приложений , работающих
с данными, является генерация различного рода отчетов. Как известно, для реа-
лизации генератора отчетов по выборкам из баз данных программист на Delphi
имеет в своем распоряжении штатные средства: компоненты из вкладок
« QReport» и «Decision Cube» палитры компонентов. Разработанный таким об-
разом генератор становится частью приложения, встроен в него, сопровождает -
ся специализированным интерфейсом, реализованным как часть интерфейса
всего приложения. Часто, однако, пользователям необходимы отчеты в форме,
пригодной для некоторой дальнейшей обработки. Удобно для этих целей ис-
пользовать общедоступные офисные приложения (Word, Excel и т.п.). В этом
случае задачей генератора отчетов становится выдача файлов в соответствую -
6 в целях маршалинга, и можно эффективно обращаться к ним, используя под- программы VarArrayLock и VarArrayUnlock . Рассматривая приведенные примеры, можно задать вопрос, каким обра- зом имена объектов (например, Word.Basic ) или методов (в данном случае, FileNew, Insert и FileSaveAs ) транслируются в уникальные идентификато- ры? Если не будет обеспечен данный механизм, невозможным станет связыва- ние в режиме выполнения. Прежде всего, рассмотрим наш пример так называе- мого программного идентификатора (programmatic identifier или сокращенно ProgID) «Word.Basic». Программный идентификатор – это удобный синоним уникального идентификатора класса CLSID. Напомним, что в модели COM класс объекта идентифицирует определенную реализацию объекта или груп- пы интерфейсов. Отображение удобочитаемого ProgID в CLSID содержится в реестре – оно помещается туда при установке программы Word на компьютер. Таким образом, любой клиент, вызвав CreateOleObject с ProgID в качестве параметра, запустит соответствующий сервер автоматизации. Что касается идентификаторов методов и свойств, то соответствующая информация связывания может быть получена клиентом из библиотеки типа или же путем обращения непосредственно к объекту через IDispatch . Напри- мер, метод IDispatch::GetIDsOfNames специально предназначен для этих целей: он возвращает идентификатор метода или свойства диспинтерфейса в ответ на запрашиваемое клиентом имя. Данный второй способ в свое время был разработан группой Visual Basic и является наиболее простым, хотя и не самым эффективным. Именно он используется встроенным типом Variant Delphi для производства позднего связывания. Еще один важный вопрос: где программист может получить сведения о реализуемых сервером объектах автоматизации? В данном случае наиболее ве- роятный источник информации для рассматриваемого примера – интерактивная справочная система Microsoft Word с полным списком объектов в этом прило- жении, которые можно использовать для автоматизации, их методов и свойств и вообще всего, что необходимо для обращения к их сервисам. В общем случае приложения, предоставляющие сервисы через автоматизацию, содержат весьма подробную документацию на сей счет. Учебный пример клиента Microsoft Word Одной из необходимых функций большинства приложений, работающих с данными, является генерация различного рода отчетов. Как известно, для реа- лизации генератора отчетов по выборкам из баз данных программист на Delphi имеет в своем распоряжении штатные средства: компоненты из вкладок «QReport» и «Decision Cube» палитры компонентов. Разработанный таким об- разом генератор становится частью приложения, встроен в него, сопровождает- ся специализированным интерфейсом, реализованным как часть интерфейса всего приложения. Часто, однако, пользователям необходимы отчеты в форме, пригодной для некоторой дальнейшей обработки. Удобно для этих целей ис- пользовать общедоступные офисные приложения (Word, Excel и т.п.). В этом случае задачей генератора отчетов становится выдача файлов в соответствую-
Страницы
- « первая
- ‹ предыдущая
- …
- 4
- 5
- 6
- 7
- 8
- …
- следующая ›
- последняя »