Архитектура Microsoft Windows для разработчиков



              

Занятие 2. Реализация СОМ - часть 2


Существующие клиенты при изменении серверных объектов остаются совместимыми — средства СОМ обеспечивают поддержку как новых, так и старых интерфейсов. На стадии выполнения старые и новые клиенты безопасно сосуществуют с серверным компонентом СОМ. Ошибки возможны только во время связывания и вызова Query Interface, однако они легко поддаются обработке. СОМ гарантирует, что не случится ошибки, вызванной отсутствием ожидаемого метода или изменением параметров его вызова.

Обратная совместимость

Visual Basic реализует обратную совместимость путем сохранения информации об идентификаторах класса или интерфейса предыдущих версий компонента. Если Вы создаете новую версию компонента в Visual Basic, применяя режим Binary Compatibility, она сможет работать со старыми клиентами. При этом клиентские приложения, откомпилированные с ней, будут пользоваться новыми функциями, поскольку при их компиляции задействованы новые идентификаторы класса и интерфейса. И пока сохраняется двоичная совместимость, клиенты с отложенным связыванием смогут работать с Вашим компонентом.

Добавление новых интерфейсов

Обновление программного модуля — это обычно добавление каких-либо функций или модернизация существующих. Компонент СОМ приобретает новые возможности за счет поддержки последних версий интерфейсов. Поскольку существующие интерфейсы при этом не меняются, компоненты, использующие их, будут работать по-прежнему. Новые же компоненты смогут воспользоваться новыми интерфейсами.

Поскольку при применении раннего связывания вызывается метод Query Interface интерфейса lUnknown, текущие возможности компонента СОМ можно выяснить при каждом его использовании. Этот механизм обеспечивает новым клиентам немедленный доступ к появившимся возможностям компонента.

Механизм контроля версий

Механизм контроля версий считают удачным, если он позволяет обновить один системный компонент без обновления других.

Приложения могут создавать экземпляры Ваших классов, используя функцию CreateObject и программный идентификатор, как это показано ниже.


Содержание  Назад  Вперед