Шаг 182.
Среда программирования Visual C++.
Альтернативные способы разработки СОМ-объектов

    На этом шаге мы рассмотрим другие способы разработки COM-объектов.

    ATL - не единственный способ разработки СОМ-объектов. Вы вправе создавать их "с нуля" на C++ или можете прибегнуть к помощи MFC-классов.

C++

    Если Вы решите реализовать СОМ-объект на C++ "с нуля", Вам придется написать довольно много кода. Это можно сделать в такой последовательности .

  1. Создайте DLL, которая будет содержать СОМ-сервер, встраиваемый в процесс.
  2. Создайте класс интерфейса, производный от IUnknown.
  3. Сгенерируйте идентификаторы GUID для объекта (CLSID) и интерфейса (IID).
  4. Объявите класс компонента, производный от класса интерфейса.
  5. Реализуйте методы IUnknown для управления временем жизни СОМ-объекта в памяти.
  6. Реализуйте специфические методы СОМ-объекта - ту функциональность, для которой он и создается.
  7. Реализуйте фабрику классов для создания сервера в адресном пространстве DLL.
  8. Реализуйте методы DllGetClassObject() и DllCanUnloadNow(), чтобы обеспечить взаимодействие СОМ и DLL-сервера, встраиваемого в процесс.
  9. Экспортируйте в операционную систему методы DHGetClassObject() и DllCanUnloadNow().
  10. Создайте сценарий реестра, содержащий GUID-идентификаторы классов объекта и интерфейса.
  11. Зарегистрируйте объект с помощью сценария.

    Большая часть приведенных выше операций связана с созданием эквивалента шаблонного СОМ-кода, который в ATL генерируется автоматически. Кроме того, написание такого кода - утомительная задача, при выполнении которой вряд ли удастся избежать ошибок. ATL 3fL же сохраняет Вам огромное количество времени, создавая при этом эффективные, высокопроизводительные компоненты.

MFC

    MFC прекрасно подходит для написания СОМ-объектов. Однако классы MFC все-таки предназначены для создания приложений, и поддержка СОМ в них не выходит за рамки OLE. OLE (теперь в большинстве своем преобразованная в ActiveX) - это технология на базе СОМ, позволяющая одним приложениям экспортировать наборы своих свойств в другие приложения. Например, именно технология OLE позволяет внедрять электронную таблицу Microsoft Excel в документ Microsoft Word.

    Поскольку функции OLE, как правило, реализованы на основе диспетчерских интерфейсов, поддержка СОМ в MFC базируется на технологии диспетчерского отображения, реализованной в классе CCmdTarget. Если же Вы захотите создать компонент со специальным интерфейсом, Вам придется обратиться к низкоуровневому кодированию на C++.

    Другой недостаток MFC COM заключается в том, что вместе с компонентом Вам придется поставлять тяжеловесные MFC-библиотеки. Если Вы поставляете свой компонент в комплекте с приложением, которое и так устанавливает DLL-библиотеки MFC, то особых проблем не возникает, но весьма утомительно проверять их наличие и устанавливать их ради одного-единственного мелкого компонента. Иногда статическое подключение MFC библиотеки приводит к "разбуханию" компонента, что недопустимо. Одна из причин разработки ATL такова: компоненты и элементы управления на основе MFC не годились для развертывания и работы в Интернете.

    Тем не менее MFC остается прекрасным инструментом для разработки компонентов на базе Automation в средах, где можно без проблем установить MFC-библиотеки. MFC - прекрасное средство для создания элементов управления на базе ActiveX, многократно используемых в Ваших MFC-приложениях.

    На следующем шаге мы вернемся к приложению STUpload.




Предыдущий шаг Содержание Следующий шаг