Реферат по предмету "Программирование"


Создание 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.

 Выберите
в меню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/


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.