Урок 10. Строковий тип BSTR
Visual C ++. ATL Урок 10. Строковий тип BSTR
Технологія COM не залежить від мови, так що типи, що використовуються в ній, відмінні від використовуваних в інших випадках. Оскільки рядки по-різному інтерпретуються іншими мовами, то COM використовується свій рядковий тип - BSTR (Basic STRing). Цей тип являє собою рядок, на початку якого вказано його довжину. Таким чином, кожен рядок з COM знає свою довжину і завершального нуль-символу в кінці рядка не потрібно.
Для надання деякого значення рядку типу BSTR використовується API-функція SysAllocString. Просте присвоєння типу
не пройде - ви повинні писати щось на зразок
Зараз ми розглянемо роботу з рядками практично - саме додамо властивість рядкового типу для елемента ActiveX, який ми з вами робили на минулих заняттях. Відкрийте цей проект, якщо він ще не відкритий.
Спочатку додамо властивість до інтерфейсу IFirstATL (через праву кнопку миші). Тільки не переплутайте – із двох однойменних інтерфейсів треба брати зовнішній, а не інтерфейс класу. У діалоговому вікні тип для нової властивості задайте як BSTR, а ім'я - як MyName:
Натисніть кнопку OK. В інтерфейсі з'явиться дві властивості MyName - для запису та читання.
Тепер додайте змінну для зберігання цієї властивості до класу CFirstATL. Для цього клацаємо на ньому правою кнопкою миші і вибираємо Add Member Variable. У діалоговому вікні задайте тип змінної як BSTR, а ім'я - як m_name. Тип доступу виберіть private:
Внесіть такі зміни для методів get_MyName та put_MyName класу CFirstATL (вони знаходяться в інтерфейсі IFirstATL цього класу):
Також внесіть зміни до конструктора для нашого класу:
Тепер компілюйте та перемикайтеся на тестовий проект для нашогоActiveX. У нас був тестовий проект Visual Basic. Для нашого ActiveX у ньому з'явилася нова властивість MyName:
Щоправда, властивість це, як і раніше, не зберігається. Але це якраз ми і розглянемо в наступному уроці.