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


Создание 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 мильонов к студенческой карме :

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

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

Сейчас смотрят :

Реферат Конструировать федерацию: Renovatio Imperii как метод социальной инженерии
Реферат Особенности производства по делам несовершеннолетних 3
Реферат Мировая политика и международные отношения.Россия в системе международных отношений
Реферат Проблема решения конфликтных ситуаций
Реферат Зарубежный опыт государственных и муниципальных заимствований
Реферат Охрана труда и экологическая безопасность: оптимизация рабочей среды в системе "человек-машина"
Реферат «Давай, с тобой поговорим » о молодёжной политике
Реферат Romance And Love Essay Research Paper Romance
Реферат Феодализм, феодальная раздробленность Руси
Реферат Параметры оценки конкурентной среды отрасли
Реферат Ислам. Деятельгость пророка Мухаммада
Реферат Исследование профессиональной направленности личности студентов химического фaкультета на педагогическую и исследовательскую специальности
Реферат Комиссионное вознаграждение. Методология учета в банке
Реферат Лексические трудности в процессе перевода заимствований
Реферат Образы белогвардейцев в советской литературе (по повести В.В. Иванова "Бронепоезд №14.69")