ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Створення 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/

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status