C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 10. Строковый тип BSTR / Библиотека ATL / Visual C++

Visual C++. ATL
Урок 10. Строковый тип BSTR

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

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

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

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

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

Сейчас мы рассмотрим работу со строками практически - а именно добавим свойство строкового типа для элемента 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:

Свойство MyName

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