Статья : Создание COM компонента на Visual C++ 


Полнотекстовый поиск по базе:

Главная >> Статья >> Информатика, программирование


Создание COM компонента на Visual C++




Создание COM компонента на Visual C++

Воробьёв Станислав

В этой статье я хотел бы описать создание простенького 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...

Теперь вы видите перед собой диалоговое окно Add Method to Interface, в поле Method Name введите ShowMessageBox, а в поле parameters введите:[in] const BSTR StringToWrite, [out,retval] long *Result.Поясняю в кратце эту строку: [in] указывает на то, что StringToWrite вводится в функцию, а [out] на то, что этот параметр возвращается, [retval] означает, что этот параметр будет возвращаться всей функцией, это нужно для того, чтобы компонент мог работать, например, в среде Visual Basic, т.к VB не поддерживает тип данных HRESULT, который возвращает эта функция. Вместо того чтобы возвращать данное типа HRESULT, в VB этот метод вернёт данное типа long. Метод создан. В нашем примере он будет показывать пользователю окно сообщение с текстом, находящимся в перемменой StringToWrite.

Давайте теперь создадим свойство строкового типа, которое будет отвечать за заголовок окна сообщения, можно было бы конечно в свойство ShowMessageBox добавить ешё один [in] параметр, который бы отвечал за это, но щас наша цель разработать демонстрационный компонент, поэтому создадим свойство. Щёлкните вновь по интерфейсу IMyObject правой кнопкой мыши и выберите Add Property... В поле Property Type выберите BSTR, а в поле Property Name введите Caption и щёлкните на Ok. Во вкладке ClassView выберите СMyObject->IMyObject вы видите 2 функции: get_Caption, put_Caption. Функция put_Caption вызывается, когда вы присваиваете свойству Caption новое значение, а get_Caption, когда считываете. В интерфейсе этих функций не будет, можете щас откомпилировать проект и зайти в Visual Basic.

< P> Выберите в менюProject->References, найдите в списке MyCom 1.0 Type Library отметьте его галочкой и щёлкните на Ok. В модуле напишите:

Dim MyObj As New MyObject

Private Sub Form_Load()

MyObj.

End Sub

Перед вами открывается список методов и свойств, как видите здесь только 1 метод ShowMessageBox и только 1 свойство Caption. Ни то ни другое пока не работает, потому что мы ещё не реализовали метод ShowMessageBox и функции put_Caption и get_Caption. Давайте заставим их работать! Сначала реализуем метод ShowMessageBox. Во вкладке ClassViewвыберитеCMyObject->IMyObject->ShowMessageBox и напишите здесь следующий код:

_bstr_t temp(StringToWrite);

_bstr_t caption(m_Caption);

*Result=MessageBox(NULL,temp,caption,MB_YESNO|MB_ICONINFORMATION);

temp.~_bstr_t();

caption.~_bstr_t();

return S_OK;

Здесь вы видите переменную m_Caption, которую нам предстоит создать в будущем для связи свойства Caption и компонента, а также наверное незнакомый класс _bstr_t. _bstr_t предоставляет полезные операторы и методы для работы с типом BSTR, но чтобы его использовать вы должны подключить header comdef.h, откройте MyObject.h и после строки #include "resource.h" // main symbols добавьте #include "comdef.h". В этом коде MessageBox вернёт либо IDYES либо IDNO, в зависимости от того, на какую кнопку нажмёт пользователь, и это значение будет возвращать функция, т.к мы написали *Result=MessageBox..., а Result возвращаемый параметр. Возможно, тип long для Result был выбран неверно, т.к MessageBox возвращает числа от 1 до 9, но как я уже говорил, этот компонент - просто тест. Теперь осталось реализовать функции put_Caption и get_Caption. Чтобы это сделать, надо сначала добавить в класс CMyObject защищённую переменную m_Caption типа BSTR, её также не будет в интерфейсе, но она будет использоваться, чтобы хранить то значение, которое пользователь присвоит свойству Caption. Откройте файл MyObject.h и после строк:

public:

STDMETHOD(get_Caption)(/*[out, retval]*/ BSTR *pVal);

STDMETHOD(put_Caption)(/*[in]*/ BSTR newVal);

STDMETHOD(ShowMessageBox)(/*[in]*/ const BSTR StringToWrite, /*[out,retval]*/ long *Result);

напишите:

protected:

BSTR m_Caption;

Здесь же в конструкторе класса напишите:

_bstr_t temp("Just a test!");

m_Caption=temp.copy();

temp.~_bstr_t();

Теперь переменная m_Caption инициализированна, по умолчанию в ней будет находиться строка "Just a test!". Ну а сейчас можно наконец-то заполнить функции get_Caption и put_Caption. Откройте файл MyObject.cpp, найдите там функцию get_Caption и напишите в ней:

*pVal=m_Caption;

return S_OK;

Теперь найдите функцию put_Caption и напишите в ней следующее:

m_Caption=newVal;

return S_OK;

Ну вот и всё в принципе, теперь можно компилировать компонент.

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://www.realcoding.net/

Похожие работы:

  • Компоненты ActiveX

    Курсовая работа >> Информатика, программирование
    ... при создании программных компонент на Web-сервере. Эти средства включают в себя Visual Basic, Visual C++, Macromedia ... и OLE, ActiveX базируется на технологии COM (и ее расширении Distributed COM). Таким образом, ActiveX ...
  • Програмирование на Visual Basic

    Реферат >> Кибернетика
    ... . Вид (View) - команды просмотра компонентов Visual Basic Вставка (Insert) - команды для ... Finish6: End Sub Private Sub Cun-iniand5_Ciick () Cl?Qse„#10 ... меню Visual Basic. Рис 5 12 Рассмотрим использование подсистемы Data Manager на примере создания ...
  • Программируем под IIS на Visual C++

    Статья >> Информатика, программирование
    ... под IIS на Visual C++ Одной ... 5.0 в составе прочих компонентов, поставляется компонент MSWC.IISLog, который ... на интерфейс ILogScripting *pLogScripting = NULL; try { // инициализируем COM ... характер. 1.1 Создание socket'а Создание socket'а осуществляется ...
  • Потоки в Visual Basic

    Курсовая работа >> Информатика, программирование
    ... моей книги "Разработка ActiveX компонент на Visual Basic 5.0" относительно новых возможностей ... всю информацию, необходимую при создании промежуточного объекта, для ... для обсуждения принципов ActiveX, COM и объектно-ориентированного программирования ...
  • Потоки в Visual Basic

    Реферат >> Информатика, программирование
    ... моей книги "Разработка ActiveX компонент на Visual Basic 5.0" относительно новых возможностей ... всю информацию, необходимую при создании промежуточного объекта, для ... для обсуждения принципов ActiveX, COM и объектно-ориентированного программирования ...
  • Электронный справочник по изучению Visual Basic

    Дипломная работа >> Информатика, программирование
    ... ; создание собственных компонентов на языке Паскаль и включение их в палитру компонентов Delphi ... с.: ил. — (Справочник). Глушаков С.В. Программирование на Visual Basic 6.0 / СБ. Глушаков, С. А. Сурядный ... www.vbrussia.com – материалы по программированию
  • Создание электронного обучающего комплекса по дисциплине "Инновационный менеджмент"

    Дипломная работа >> Информатика, программирование
    ... цена, основными компонентами инновационной деятельности выступают новшества, ... Basic. Встроенная поддержка Internet и другие разнообразные ... содержит группу флажков Knowledge Track (Контроль знаний ... на значке созданного кадра; на экране появится пустое окно просмотра ...
  • Создание компонентов JavaBeans

    Лабораторная работа >> Информатика, программирование
    ... Распределенные системы обработки информации» "Создание компонентов JavaBeans" Москва 2004 г. Цель ... – http://java.sun.com/products/jdk/1.5/index.html. ... «визуальное программирование на Visual Basic». Программировать при помощи компонентов JavaBeans очень просто ...
  • Создание программы для работы со сканером

    Курсовая работа >> Информатика, программирование
    ... была среда разработки Visual Basic, создание графического пользовательского интерфейса ... преткновения на пути создания серьезных программ. Создание нестандартных компонентов в среде Visual Basic ... Елманова Н. и др. "Delphi и технология COM. Мастер-класс"
  • Что такое COM - современный взгляд

    Контрольная работа >> Информатика, программирование
    ... написанное на Visual Basic, использует компоненты, созданные посредством Visual C++. Для достижения этой независимости в COM имеются собственный ... представляет собой структуру, облегчающую создание небольших СОМ компонентов. В ATL использованы новейшие ...