Кент Рейсдорф. BORLAND C++BUILDER. Раздел 4
Кент Рейсдорф. BORLAND C++BUILDER. Страница 441
Теперь вы можете проверить, действительно ли Autocon может вызывать методы, определенные в TMyOLEEditServer. Используйте для этого кнопки в Autocon. Щелкните на кнопке Get Val для получения текущего содержимого компонента Editl в MyAuto. Теперь наберите текст в окне редактирования TEdit приложения Autocon и щелкните на кнопке Set Val. Вы увидите, как введенный текст появится в окне Editl приложения MyAuto. В завершение щелкните на кнопке Clear приложения Autocon.
При нажатии на кнопку Clear вы получите сообщение об ошибке, поскольку мы не реализовали метод С1еаг(), когда копировали код из Autosrv в MyAuto. Так как реализация OLE в C++Builder основана на позднем связывании (late binding), вы часто будете узнавать о подобных промахах только при тестировании приложения.
Вы завершили создание своего автоматизированного сервера OLE. Как видите, этот процесс действительно прост, если пройти через него один или два раза.
Листинги 15.4-15.8 содержат полный исходный код приложения MyAuto.
см. продолжение
Теперь, когда вы познакомились с работой автоматизированных серверов OLE, давайте рассмотрим контейнеры OLE. Контейнер OLE позволяет приложению работать с объектом, принадлежащим другому приложению. Объект может быть вставлен либо как значок (и просматриваться/редактироваться в своем исходном приложении), либо с сохранением своего оригинального вида, что позволяет просматривать или редактировать его непосредственно. При работе с документами OLE основное внимание уделяется не исходному приложению, а самому документу.
В C++Builder для поддержки контейнеров OLE используется компонент TOLEContainer, который предоставляет специальные методы для создания объектов OLE. Вы можете использовать CreateObject или CreateObjectFromFile для создания внедренного объекта OLE, тогда как CreateLinkToFile создает связанный объект. Внедренный объект OLE реально содержится в своем базовом документе. Связанный объект, напротив, располагается на диске — базовый документ содержит только ссылку на него. Преимущество внедренных объектов заключается в том, что их базовые документы являются одновременно и контейнерами — в этом случае не требуются никакие дополнительные или служебные файлы. Вы можете пересылать документ с внедренными объектами OLE, не беспокоясь о включении дополнительных файлов. При работе со связанными объектами требуется включение исходных документов. В этом случае размер базового документа получается меньше, поскольку он содержит только ссылки на связанные объекты, а не сами эти объекты.