Создание com объекта в visual studio
В этой статье я хотел бы описать создание простенького COM компонента на Visual C++, он, в принципе, ничего полезного делать не будет, он просто послужит моделью для создания COM'ов, которые будут более функциональными.
Итак приступим, откройте Visual C++, в меню New выберите ATL COM AppWizard,затем напишите в поле Project Name: MyCom и нажмите Ok. В этом Wizard'е всего 1 шаг, вы должны выбрать тип, выберите DLL, вы также можете, например, добавить поддержку MFC, но мы не будем этого делать, т.к наш компонент не будет каким-то очень замудрённым, он будет простым и будет служить для ознакомительных целей, поэтому не надо нагружать его дополнительными килобайтами библиотеки MFC.
Проект создан, теперь надо добавить в него COM-объект, нажмите на Insert в главном меню и выберите New ATL Object.
Выберите категорию Objects и объект Simple Object. Теперь вы видите диалоговое окно, щёлкните по вкладке Names, В поле Short Name введите имя компонента, который вы предполагаете создать, пусть это будет MyObject, заметьте что все остальные поля заполняются автоматически, рекомендуется так и оставить.
Если хотите, можете изменить поле type, это просто описание COM'а, давайте введём My first Class. Теперь щёлкните по вкладке Attributes, выберите Single threading model, Custom interface и No Aggregation. Всё, вы создали компонент, ну а теперь надо сделать его рабочим. Во вкладке ClassView вы видите созданный вами класс CMyObject и интерфейс IMyObject, он нужен для создания библиотеки типов.
Выберите интерфейс IMyObject во вкладке ClassView, щёлкните по нему правой кнопкой мыши и из контекстного меню выберите Add Method.
Выберите в меню Project->References, найдите в списке MyCom 1.0 Type Library отметьте его галочкой и щёлкните на Ok. В модуле напишите:
Перед вами открывается список методов и свойств, как видите здесь только 1 метод ShowMessageBox и только 1 свойство Caption. Ни то ни другое пока не работает, потому что мы ещё не реализовали метод ShowMessageBox и функции put_Caption и get_Caption. Давайте заставим их работать! Сначала реализуем метод ShowMessageBox. Во вкладке ClassViewвыберитеCMyObject->IMyObject->ShowMessageBox и напишите здесь следующий код:
Здесь же в конструкторе класса напишите:
Теперь переменная m_Caption инициализирована, по умолчанию в ней будет находиться строка "Just a test!". Ну а сейчас можно наконец-то заполнить функции get_Caption и put_Caption. Откройте файл MyObject.cpp, найдите там функцию get_Caption и напишите в ней:
Самый простой способ предоставить COM-объекты — использовать шаблон COM-класса. Этот шаблон создает новый класс, затем настраивает проект для создания класса с уровнем взаимодействия в качестве COM-объекта и зарегистрируйте его в операционной системе.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Создание COM-объекта с помощью шаблона класса COM
откройте новый проект Windows приложения в меню файл , щелкнув создать Project.
убедитесь, что в диалоговом окне новый Project в поле типы Project выбрано значение Windows. В списке шаблоны выберите пункт Библиотека классов , а затем нажмите кнопку ОК. Отобразится новый проект.
выберите добавить новый элемент в меню Project . Откроется диалоговое окно Добавление нового элемента.
Выберите класс COM в списке шаблоны и нажмите кнопку добавить. Visual Basic добавляет новый класс и настраивает новый проект для COM-взаимодействия.
Добавьте в класс COM код, например свойства, методы и события.
Выберите Сборка ClassLibrary1 в меню Сборка . Visual Basic создает сборку и регистрирует COM-объект в операционной системе.
Создание COM-объектов без шаблона класса COM
Можно также создать COM-класс вручную вместо использования шаблона COM-класса. Эта процедура полезна при работе из командной строки или в том случае, если требуется больший контроль над определением объектов COM.
Настройка проекта для создания COM-объекта
откройте новый проект Windows приложения в меню файл , щелкнув NewProject.
убедитесь, что в диалоговом окне новый Project в поле типы Project выбрано значение Windows. В списке шаблоны выберите пункт Библиотека классов , а затем нажмите кнопку ОК. Отобразится новый проект.
В обозревателе решений щелкните правой кнопкой мыши на проект и выберите пункт Свойства. откроется конструктор Project .
Откройте вкладку Компиляция.
Настройка кода в классе для создания COM-объекта
В Обозреватель решенийдважды щелкните Class1. vb , чтобы отобразить его код.
Переименуйте класс в ComClass1 .
Добавьте следующие константы в ComClass1 . Они будут хранить константы глобального уникального идентификатора (GUID), которые должны иметь объекты COM.
В меню Сервис выберите пункт Создать GUID. В диалоговом окне Создание GUID нажмите кнопку Формат реестра, а затем Копировать. Щелкните Выход.
Замените пустую строку в ClassId идентификаторе GUID, удалив начальные и конечные фигурные скобки. Например, если идентификатор GUID, предоставленный Guidgen, будет "" выглядеть следующим образом.
Повторите предыдущие шаги для InterfaceId констант и EventsId , как показано в следующем примере.
Убедитесь, что идентификаторы GUID являются новыми и уникальными. в противном случае COM-компонент может конфликтовать с другими COM-компонентами.
ComClass Добавьте атрибут в ComClass1 , указав идентификаторы GUID для идентификатора класса, идентификатора интерфейса и идентификатора события, как показано в следующем примере:
Добавьте свойства, методы и события в класс, завершая его End Class оператором. В меню Сборка выберите пункт построить решение . Visual Basic создает сборку и регистрирует COM-объект в операционной системе.
Вызываемая оболочка времени выполнения из библиотеки типов для выполнения COM-объектов в управляемом коде.
Вызываемая оболочка COM с соответствующими параметрами реестра для выполнения управляемого объекта в собственном приложении.
В Visual Studio оболочку COM можно добавить в проект в виде ссылки.
Создание оболочек для COM-объектов в управляемом приложении
Создание вызываемой оболочки времени выполнения с использованием Visual Studio
Откройте проект управляемого приложения.
В меню Проект выберите пункт Показать все файлы.
В меню Проект щелкните команду Добавить ссылку.
В диалоговом окне "Добавление ссылки" перейдите на вкладку COM, выберите нужный компонент и нажмите кнопку ОК.
Обратите внимание, что в обозревателе решений в папку ссылок проекта добавляется COM-компонент.
При программировании компонентов Microsoft Office сначала необходимо установить распространяемые основные сборки взаимодействия Microsoft Office.
Это средство создает сборку, которая содержит метаданные времени выполнения для типов, определенных в исходной библиотеке типов.
Создание оболочек для управляемых объектов в собственном приложении
Создание вызываемой оболочки COM с использованием Visual Studio
Создайте проект библиотеки классов для управляемого класса, который требуется выполнять в машинном коде. Класс должен содержать конструктор без параметров.
Убедитесь, что в файле AssemblyInfo присутствует полный номер версии сборки, состоящий из четырех частей. Этот номер необходим для управления версиями в реестре Windows. Дополнительные сведения о номерах версий см. в разделе Управление версиями сборки.
В меню Проект выберите пункт Свойства.
Откройте вкладку Компиляция.
При построении проекта сборка автоматически регистрируется для COM-взаимодействия. При создании собственного приложения в Visual Studio можно использовать сборку, выбрав Добавить ссылку в меню Проект.
Программу Regasm.exe можно запускать для сборки, расположенной в любом каталоге. После этого необходимо запустить Gacutil.exe (программу глобального кэша сборок), чтобы перенести ее в глобальный кэш сборок. При переносе сборки записи расположения в реестре сохраняют силу, поскольку во всех случаях, когда сборка не найдена, проверяется глобальный кэш сборок.
Библиотеку шаблонов C++ (WRL) среда выполнения Windows можно использовать для создания базовых классических COM-компонентов для использования в классических приложениях, а также для приложений универсальная платформа Windows (UWP). Для создания com-компонентов библиотека шаблонов среда выполнения Windows C++ может требовать меньше кода, чем ATL. Сведения о подмножестве COM, поддерживаемых библиотекой шаблонов среда выполнения Windows C++, см. в разделе среда выполнения Windows библиотеке шаблонов C++ (WRL).
В этом документе показано, как использовать библиотеку шаблонов среда выполнения Windows C++ для создания базового COM-компонента. Хотя можно использовать механизм развертывания, который наилучшим образом соответствует требованиям, в этом документе также показан простой способ регистрации и использования компонента модели COM из обычного приложения для настольных систем.
Использование библиотеки шаблонов C++ среда выполнения Windows для создания базового классического COM-компонента
В Visual Studio создайте проект пустого решения. Присвойт проекту имя, например WRLClassicCOM .
Добавьте Project Win32 в решение. Присвойт проекту имя, например CalculatorComponent . На вкладке "Приложение Параметры" выберите библиотеку DLL.
Добавьте файл Midl File (IDL) в проект. Присвойт файлу имя, например CalculatorComponent.idl .
Добавьте этот код в файл CalculatorComponent.idl:
В файле CalculatorComponent.cpp определите класс CalculatorComponent . Класс CalculatorComponent наследуется от Microsoft::WRL::RuntimeClass. Microsoft::WRL::RuntimeClassFlags указывает, что класс является производным от IUnknown , а не IInspectable. ( IInspectable доступно только для среда выполнения Windows компонентов приложения.) CoCreatableClass создает фабрику для класса, который можно использовать с такими функциями, как CoCreateInstance.
Используйте следующий код для замены кода в dllmain.cpp . Этот файл определяет функции экспорта библиотек DLL. Эти функции используют класс Microsoft::WRL::Module для управления фабриками классов для модуля.
Добавьте в файл CalculatorComponent.def следующий код:
Добавьте файл runtimeobject.lib в строку компоновщика. Сведения о том, как это сделать, см. в разделе .Lib "Файлы как входные данные компоновщика".
Использование компонента модели COM в обычном приложении для настольных систем
Зарегистрируйте компонент модели COM в реестре Windows. Для этого создайте файл записей регистрации, присвойте ему имя RegScript.reg и добавьте следующий текст. Замените путем к библиотеке DLL, например C:\temp\WRLClassicCOM\Debug\CalculatorComponent.dll .
Запустите RegScript.reg или добавьте его в событие после сборки проекта. Дополнительные сведения см. в диалоговом окне командной строки события перед сборкой или после сборки.
Добавьте проект консольного приложения Win32 в решение. Присвойт проекту имя, например Calculator .
Используйте этот код для замены содержимого Calculator.cpp :
Отказоустойчивость
В этом документе для демонстрации использования стандартных функций COM можно использовать библиотеку шаблонов среда выполнения Windows C++, чтобы создать com-компонент и сделать его доступным для любой технологии с поддержкой COM. Вы также можете использовать среда выполнения Windows типы библиотек шаблонов C++, такие как Microsoft::WRL::ComPtr в классическом приложении для управления временем существования COM и другими объектами. Следующий код использует библиотеку шаблонов среда выполнения Windows C++ для управления временем существования указателя ICalculatorComponent . Класс CoInitializeWrapper является программой-оболочкой RAII, которая гарантирует, что библиотека COM освобождена и время ее жизни превысит время жизни объекта интеллектуального указателя ComPtr .
Visual Studio предоставляет мастеры и шаблоны для создания проектов, использующих определяющие COM интерфейсы и disp-интерфейсы для COM-объектов и классов автоматизации.
Эти мастеры можно использовать для выполнения трех следующих типичных задач.
Добавьте поддержку ATL в приложение MFC после создания проекта MFC с помощью мастера приложений MFC и последующего запуска мастера кода Добавление поддержки ATL в MFC. Эта поддержка действует только для простых COM-объектов, добавленных в исполняемый файл MFC или проект библиотеки DLL. Эти объекты ATL могут иметь несколько интерфейсов.
Откройте Мастер элементов ActiveX MFC для создания элемента управления ActiveX с disp-интерфейсом и схемы событий, определенных в IDL-файле и классе элементов управления соответственно.
Используйте сочетание мастера проектов ATL и мастера элементов управления ATL, чтобы создать элемент управления ActiveX ATL.
Вы также можете добавить элемент управления ATL в проект MFC, куда уже добавили поддержку ATL, как описано выше. Кроме того, если вы выбираете пункт Элемент управления ATL в диалоговом окне Добавление класса и еще не добавили поддержку ATL в проект MFC, Visual Studio отображает диалоговое окно с предложением подтвердить добавление поддержки ATL в ваш проект MFC.
Этот мастер создает исходный код IDL и схему COM в классах проекта.
После открытия проекта ATL диалоговое окно Добавление класса позволяет вам выбрать дополнительные мастеры и шаблоны для добавления COM-интерфейсов в проект. Следующие мастеры позволяют задать один или несколько интерфейсов для объекта.
Кроме того, можно реализовать новые интерфейсы для своего элемента управления COM. Просто щелкните правой кнопкой мыши класс элемента управления объекта в представлении классов и выберите команду Реализовать интерфейс.
Visual Studio не предоставляет мастер для добавления интерфейса в проект. Вы можете добавить интерфейс в проект ATL или добавить поддержку ATL в проект MFC, добавив простой объект с помощью мастера простых объектов ATL. Кроме того, можно открыть IDL-файл проекта и создать интерфейс, введя следующее:
Visual C++ предоставляет несколько способов просмотра и редактирования COM-интерфейсов, определенных для проектов. В представлении классов отображаются значки для всех интерфейсов или disp-интерфейсов, определенных в IDL-файле проекта C++.
Для классов COM-объектов на основе ATL представление классов считывает схему COM в классе ATL, чтобы показать связь между классом ATL и любым из реализуемых им интерфейсов.
В представлении классов и его контекстных меню можно работать с интерфейсами следующим образом.
- Добавление объектов ATL в приложение на основе MFC.
- Добавление методов, свойств и событий.
- Переход непосредственно к коду интерфейса элемента с помощью двойного щелчка элемента.
В этом разделе
Изменение интерфейса COM
С помощью команд из контекстного меню представления классов можно определить новые методы и свойства для COM-интерфейсов в проектах Visual Studio C++. С панели элементов можно также определить события для элементов управления ActiveX.
Для классов COM-объектов на основе ATL и MFC можно изменить реализацию класса одновременно с редактированием интерфейса.
Для интерфейсов, определенных за пределами диалогового окна Добавление класса, Visual C++ добавляет методы или свойства в IDL-файл, а также добавляет заглушки в классы, реализующие методы, даже если интерфейсы добавляются вручную.
Ниже указаны три мастера, помогающие настроить существующие интерфейсы. Они доступны из представления классов:
При необходимости Visual C++ определяет тип проекта и изменяет параметры в мастере добавления свойства:
При необходимости Visual C++ определяет тип проекта и изменяет параметры в мастере добавления метода:
Кроме того, можно реализовать новые интерфейсы для своего элемента управления COM. Просто щелкните правой кнопкой мыши класс элемента управления объекта в представлении классов и выберите команду Реализовать интерфейс.
Читайте также: