Создание com объекта в visual studio

Обновлено: 28.04.2024

COM объекты в Visual Studio - создание и отладка "ручка

13 posts • Page 1 of 1 AlexanderS Уже с Приветом Posts: 225 Joined: Mon Aug 07, 2000 1:01 am Location: Moscow, RU -> Chicago, IL Contact:

COM объекты в Visual Studio - создание и отладка "ручка

Post by AlexanderS » Wed Nov 21, 2001 3:12 am

Может быть покажусь двоечником в этом вопросе,
но спрошу. Как жители привета пишут "ручками"
COM-объекты? Имеется ввиду с использованием ATL?
Просто это можно сделать создав соответствующий
проект и через Insert->New ATL Object сделать
каркас и потом в него добивать всю реализацию.
Но иногда хочется все написать самому с самого
нуля, а если ошибки возникают, то тут проблема
все это отладить - проще заново с использованием
мастера все сделать.

Вобщем надо еще учиться и учиться или это
стандартная проблема разбираться в коде, в
котором переплетены C,C++,IDL,COM,ATL?

Заранее спасибо за комментарии.

[ 21-11-2001: Message edited by: AlexanderS ]</p>

Vovka Уже с Приветом Posts: 1906 Joined: Wed Mar 14, 2001 1:01 am

COM объекты в Visual Studio - создание и отладка "ручка

Post by Vovka » Wed Nov 21, 2001 3:58 am

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by AlexanderS:
<strong>Здравствуйте!

Может быть покажусь двоечником в этом вопросе,
но спрошу. Как жители привета пишут "ручками"
COM-объекты? Имеется ввиду с использованием ATL?
Просто это можно сделать создав соответствующий
проект и через Insert->New ATL Object сделать
каркас и потом в него добивать всю реализацию.
Но иногда хочется все написать самому с самого
нуля, а если ошибки возникают, то тут проблема
все это отладить - проще заново с использованием
мастера все сделать.

Вобщем надо еще учиться и учиться или это
стандартная проблема разбираться в коде, в
котором переплетены C,C++,IDL,COM,ATL?

Заранее спасибо за комментарии.

[ 21-11-2001: Message edited by: AlexanderS ]</strong><hr></blockquote>

Ну, что касается ATL - так там не так уж много и "переплетено", ИМХО. Сгенерите сначала с помошью мастера (кстати, Вы это хорошо придумали - я чуть было [i:cd761f4116]колдуна[/i:cd761f4116] не написал [img:cd761f4116]images/smiles/icon_wink.jpg[/img:cd761f4116] ), посмотрите, чего там нагенерено и в каких местах, и для чего это нужно. Add New Object делает следующее:

1) создаёт новый интерфейс
2) создаёт объект с этим интерфейсом
3) генерит С++ класс
4) добавляет запись в object map.

Вроде всё, если чего забыл - поправьте.

Пп. 1) и 2) тривиальны.

В п. 3) мне всегда казалось геморром помнить от кого нужно наследоваться и какие макросы добавлять - поэтому я делал это методом копирования предыдущих (естественно, для разных случаев это может различаться, но для меня всё равно было проще редактировать что-то существующее, чем писать с нуля).

Самый простой способ предоставить 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 dll. Я сделал пару классов, которые наследуются от некоторых COM-интерфейсов, но я хочу проверить это. Я знаю, что мне нужно где-то поместить GUID, а затем зарегистрировать его в regsvr32, но какие шаги?

Edit: Извините, забыл упомянуть, что я использую C++.

чтобы создать новый проект ATL COM, вы можете действовать следующим образом:

  1. Файл/Новый Проект
  2. проект Visual C++/ATL / ATL
  3. Настройка параметров и нажмите кнопку Готово, когда сделано

вы создали новую dll, но она пуста, чтобы добавить COM-объект, вы можете сделать это:

  1. Проект/Добавить Класс
  2. Visual C++/ATL/ATL простой объект, нажмите add
  3. дайте имя, которое вы хотите (например, MyObject), и нажмите закончить, чтобы добавить его

Если вы хотите, чтобы объект реализовал интерфейс

PS: гораздо проще создать новый проект ATL с тем же именем в другой папке и добавить файлы, которые вы настроили. Мастер выполняет несколько задач и создает несколько настраиваемых файлов.

для больших проектов, которые трудно добавить файл за файлом, я делаю то же самое, но вместо добавления моих файлов в новый проект я начинаю копировать настройки из новых проектов в старый один и добавление любого дополнительного файла, созданного мастером, и исправление заголовков, таких как stdafx.h для объединения новых настроек.

PPS: если вы хотите, чтобы ваша dll поддерживала MFC, вместо выбора проекта ATL вам нужно выбрать MFC/MFC Dll. При добавлении простого объекта ATL мастер попросит добавить поддержку ATL в проект.

вам нужно написать функцию под названием DllGetClassObject и экспортировать его. Эта функция отвечает за выделение "фабрики классов", которую вы также должны написать, и которая, в свою очередь, способна выделять экземпляры вашего COM-объекта. Он должен реализовать IClassFactory.

это не слишком сложно сделать. Альтернативой является использование ATL (см. ответ xhantt), который теоретически делает это для вас, но на практике это настоящий беспорядок. Как-то это удается инкапсулируйте сложность COM внутри слоя абстракции, который еще сложнее. Удачи в попытке переместить объект между DLL, например.

затем вам нужно зарегистрировать DLL-т. е. поместить ключи в реестр. The regsvr32 инструмент не может сделать это без дополнительной помощи от вас. Ты должен напишите и экспортируйте другую функцию под названием DllRegisterServer, который делает всю тяжелую работу. Все это regsvr32 делает это загрузка DLL, посмотрите DllRegisterServer и назвать его.

опять же, ATL имеет способ реализации этого для вас, но он делает это, читая своего рода сценарий, полный инструкций по изменению реестра, хранящихся в an .файл rgs, который внедряется в ресурсы вашей DLL. Если вы случайно поместили какую-либо синтаксическую ошибку в этот файл, регистрация завершится неудачно молча.

Итак, опять же, вы можете найти проще написать несколько строк кода, чтобы настроить реестр самостоятельно. вот подробности.

когда вы создаете решение, оно автоматически регистрирует dll. А также он создает два файла _i.c and .H-файл.

для проверки dll создайте пример приложения:

создать пример приложения Win32. Включая _i.c and .h в файле cpp приложения win32, которое имеет основную функцию

Установка Visual Studio для Windows Forms

Разработка классических приложений .NET Windows Forms в Visual Studio

После установки среды и всех ее компонентов, запустим Visual Studio и создадим проект графического приложения. На стартовом экране выберем Create a new project (Создать новый проект)

На следующем окне в качестве типа проекта выберем Windows Forms App :

Далее на следующем этапе нам будет предложено указать имя проекта и каталог, где будет располагаться проект.

В поле Project Name дадим проекту какое-либо название. В моем случае это HelloApp .

После этого Visual Studio откроет наш проект с созданными по умолчанию файлами:

Справа находится окно Solution Explorer, в котором можно увидеть структуру нашего проекта. В данном случае у нас сгенерированная по умолчанию структура:

Далее идет файл единственной в проекте формы - Form1.cs , который по умолчанию открыт в центральном окне:

Класс формы - Form1 представляет графическую форму - фактически то окно, которое мы увидим на экране при запуске проекта.

Этот класс определяется как частичный (с модификатором partial ) и наследуется от встроенного класса Form , который содержит базовую функциональность форм.

В самом классе Form1 определен по умолчанию только конструктор, где вызывается метод InitializeComponent() , который выполняет инициализацию компонентов формы из файла дизайнера.

Рядом с этим элементом можно заметить другой файл формы - Form1.Designer.cs . Это файл дизайнера - он содержит определение компонентов формы, добавленных на форму в графическом дизайнере и именно его код по сути передается выше через вызов InitializeComponent()

Program.cs определяет точку входа в приложение:

Метод Main снабжен атрибутом [STAThread] . Этот атрибут, грубого говоря, необходим для корректной работы компонентов Windows. В самом методе сначала вызывается метод

который устанавливает некоторую базовую конфигурацию приложения

Затем вызывается метод

в который передается объект отображаемой по умолчанию на экране формы.

Настройка компиляции проекта

В итоге нам откроектся файл с расширением csproj , который называется по имени проекта (например, HelloApp.csproj) со следующим содержимым:

Для компиляции приложения Windows Forms указаны следующие настройки:

OutputType : определяет выходной тип проекта. Должен иметь значение WinExe - то есть выполняемое приложение с расширением exe под Windows

Nullable : подключает в проект функционалность ссылочных nullable-типов

UseWindowsForms : указывает, будет ли проект использовать Windows Forms (для этого устанавливается значение true )

ImplicitUsings : подключает в проект функциональность неявно подключаемых глобальных пространств имен

Запуск приложения

Чтобы запустить приложение в режиме отладки, нажмем на клавишу F5 или на зеленую стрелочку на панели Visual Studio.

Запуск проекта Windows Forms в Visual Studio

После этого запустится пустая форма Form1 по умолчанию.

После запуска приложения студия компилирует его в файл с расширением exe. Найти данный файл можно, зайдя в папку проекта и далее в каталог \bin\Debug\net6.0-windows

Рассмотрев вкратце создание проекта графического приложения, мы можем перейти к обзору основных компонентов и начнем мы с форм.

Читайте также: