Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


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

Тип Реферат
Предмет Информатика и программирование
Просмотров
1586
Размер файла
16 б
Поделиться

Ознакомительный фрагмент работы:

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

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


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
157018
рейтинг
icon
6076
работ сдано
icon
2739
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
66 799 оценок star star star star star
среднее 4.9 из 5
Сибирский федеральный университет
Татьяна выполнила работу раньше срока, исправила все замечания, которые были даны преподав...
star star star star star
МГТУ ГА
Исполнитель ответственно отнесся к данной работе. Все выполнено замечательно. Всем советую!!!
star star star star star
ЛГУ им Пушкина
Отличный исполнитель, Максим! Выполнил работу раньше заявленного срока! Работа выполнена б...
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Для электрической схемы, изображенной на рисунке

Решение задач, Электротехника и электроника

Срок сдачи к 4 июня

2 минуты назад
2 минуты назад

дм

Курсовая, дм

Срок сдачи к 11 июня

4 минуты назад

Нужно настроить документ ворд отступы интервалы и...

Курсовая, Электроснабжение

Срок сдачи к 3 июня

6 минут назад

задача 2

Решение задач, Электротехника и электроника

Срок сдачи к 5 июня

7 минут назад

решить одно задание

Контрольная, Линейная алгебра

Срок сдачи к 3 июня

9 минут назад

Доработать

Курсовая, Управление ассортиментом товаров, торговое дело

Срок сдачи к 4 июня

10 минут назад
10 минут назад

Выполнить 3 задания из файла

Контрольная, Международное частное право

Срок сдачи к 9 июня

11 минут назад

Выполнить контрольное практическое задание и дать развернутые ответы

Контрольная, Основы судебно-экспертной деятельности

Срок сдачи к 9 июня

11 минут назад

Сделать два реферата

Контрольная, Доказывание и доказательства по гражданским, административным делам и экономическим спорам

Срок сдачи к 9 июня

11 минут назад

Выполнить задание из файла

Контрольная, Транспортное право

Срок сдачи к 9 июня

11 минут назад

Поведенческая экономика. Исследование паттернов людей

Диплом, Поведенческая экономика

Срок сдачи к 1 сент.

11 минут назад

Реклама и интегрированные коммуникции

Лабораторная, Информатика и основы информационно-коммуникационных технологий

Срок сдачи к 5 июня

11 минут назад

Практическое задание

Другое, Информатика и основы информационно-коммуникационных технологий

Срок сдачи к 5 июня

11 минут назад

Исправить недочеты в работе вкр. без нейросети!! самое важное!

Другое, Государственное и муниципальное управление

Срок сдачи к 4 июня

11 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно