Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию. Visual C++, MFC, VB, ActiveX


Служба Рассылок Subscribe.Ru

Visual C++. COM. Библиотека ATL. Уроки по программированию с сайта http://alexeev.nm.ru

С Новым годом!

Рассылка №22

Visual C++. COM. Библиотека ATL. Урок 9. Конфигурации проекта.
Visual C++. COM. Библиотека ATL. Урок 10. Строковый тип BSTR.
Visual C++. COM. Библиотека ATL. Урок 11. Сохранение свойств.

Полные версии уроков (с картинками) можно найти по адресам
Урок 9. Конфигурации проекта.
Урок 10. Строковый тип BSTR.
Урок 11. Сохранение свойств.

Visual C++. Технология COM и библиотека ATL. Урок 9. Конфигурации проекта

В библиотеке ATL, как и в библиотеке MFC и в консольных приложениях, вы можете выбирать различные конфигурации для вашего проекта. Но если в MFC и в консольных приложениях их было только две (см. урок 8 в консольных прилжениях), то в ATL их несколько больше. Для изменения текущей конфигурации зайдите в меню Build и выберите пункт Set Active Project Configuration. Появится соответствующее диалоговое окно.

Как вы видите, для библиотеки ATL существует целых шесть конфигураций. Они делятся на две серии - обычная и уникодовская (использующая Unicode - набор двухбайтных символов. В нем для каждого символа каждого языка определено свое место. Больше всего места, разумеется, занимает китайский язык). Каждая конфигурации (и обычная, и уникодовская) делится на три вида - Debug (отладочная), MinSize (минимальная по размеру) и MinDependency (минимальная зависимость от других файлов). Вы выбираете то, что вам надо, и нажимаете на кнопку OK. Все, теперь при компиляции у вас создастся папка с соответствующим именем, в которую и скомпилируется ваш файл *.dll.

Наверх

Visual C++. Технология COM и библиотека ATL. Урок 10. Строковый тип BSTR

Технология COM не зависит от языка, так что используемые в ней типы отличны от используемых в других случаях. Так как строки по разному интерпретируются в других языках, то в COM используется свой строковый тип - BSTR (Basic STRing). Этот тип представляет из себя строку, в начале которой указана ее длина. Таким образом каждая строка с COM знает свою длину и завершающего нуль-символа в конце строки не требуется.

Для присваивания некоторого значения строке типа BSTR используется API-функция SysAllocString. Простое присваивание типа

BSTR str="Some string" //Неправильно!

не пройдет - вы должны писать что-то вроде

BSTR str=SysAllocString(L"Some string"); //Правильно

Сейчас мы рассмотрим работу со строками практически - а именно добавим свойство строкового типа для элемента ActiveX, который мы с вами делали на прошлых занятиях. Откройте этот проект, если он у вас еще не открыт.

Сначала добавим свойство в интерфейс IFirstATL (через правую кнопку мыши). Только не перепутайте - из двух одноименных интерфейсов надо брать внешний, а не интерфейс класса. В появившемся диалоговом окне тип для нового свойства задайте как BSTR, а имя - как MyName. Нажмите OK. В интерфейсе появится два свойства MyName - для записи и для чтения.

Теперь добавьте переменную для хранения этого свойства в класс CFirstATL. Для сего щелкаем на нем правой кнопкой мыши и выбираем Add Member Variable. В появившемся диалоговом окне задайте тип переменной как BSTR, а имя - как m_name. Тип доступа выберите private, после чего закройте это диалоговое окно.

Внесите следующие изменения для методов get_MyName и put_MyName класса CFirstATL (они находятся в интерфейсе IFirstATL этого класса):

STDMETHODIMP CFirstATL::get_MyName(BSTR *pVal)
{
    // TODO: Add your implementation code here
    *pVal=SysAllocString(m_name);
    return S_OK;
}

STDMETHODIMP CFirstATL::put_MyName(BSTR newVal)
{
    // TODO: Add your implementation code here
    m_name=SysAllocString(newVal);
    return S_OK;
}

Также внесите изменения в конструктор для нашего класса:

    ...
    CFirstATL()
    {
        m_num=0;
        m_name=SysAllocString(L"");
    }

Теперь компилируйте и переключайтесь на тестовый проект для нашего ActiveX. У нас был тестовый проект на Visual Basic. Для нашего ActiveX в нем появилось новое свойство MyName.

Правда, свойство это по-прежнему не сохраняется. Но вот это как раз мы и рассмотрим в следующем уроке.

Наверх

Visual C++. Технология COM и библиотека ATL. Урок 11. Сохранение свойств

Сейчас наш элемент ActiveX не сохраняет свои свойства. Давайте посмотрим, что надо сделать для сохранение свойств.

Найдите пару макросов BEGIN_PROP_MAP и END_PROP_MAP в файле FirstATL.h и внесите следующие изменения:

BEGIN_PROP_MAP(CFirstATL)
    PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
    PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
    PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_StockColorPage)
    PROP_ENTRY("num", 1, CLSID_NULL)
    PROP_ENTRY("MyName", 4, CLSID_NULL)
    // Example entries
    // PROP_ENTRY("Property Description", dispid, clsid)
    // PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Все! Теперь пользовательские свойства num и MyName будут сохраняться! Немного пояснений, что же мы тут такого сделали. Для сохранения свойств используется макрос PROP_ENTRY. Первый его параметр - это имя нашего свойства. Второй - это идентификатор нашего свойства (кстати, это число у вас может быть другое). Для его выяснения просто сделайте двойной щелчок на нужном свойстве внешнего интерфейса IFirstATL. Число в круглых скобках после id нам и надо.

И, наконец, третий параметр у макроса PROP_ENTRY - это идентификатор страницы со свойствами для нашего элемента ActiveX. Так как у нашего элемента нет (пока) страницы свойств, то ставим CLSID_NULL.

Кстати, обратите внимание, что встроенное свойство BackColor сохранялось и без нашего участия. И именно потому, что для него уже есть строка

    ...
    PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_StockColorPage)
    ...

С сохранением свойств все!

Наверх

Copyright Алексеев Игорь, 2002

Copyright cайт alexeev.nm.ru, 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное