Алекс Jenter - Программирование на Visual C++. Архив рассылки

Тут можно читать онлайн Алекс Jenter - Программирование на Visual C++. Архив рассылки - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование на Visual C++. Архив рассылки
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.33/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Алекс Jenter - Программирование на Visual C++. Архив рассылки краткое содержание

Программирование на Visual C++. Архив рассылки - описание и краткое содержание, автор Алекс Jenter, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.

Программирование на Visual C++. Архив рассылки - читать онлайн бесплатно полную версию (весь текст целиком)

Программирование на Visual C++. Архив рассылки - читать книгу онлайн бесплатно, автор Алекс Jenter
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
Обратите внимание – обработка строк

Я хочу остановиться на некоторых моментах, касающихся работы со строками при написании программ в COM.

Всякий раз, когда метод COM возвращает строку, он делает это, используя формат Unicode. Unicode это таблица символов, также как и ASCII, только все символы в ней занимают 2 байта (в ANSI – один байт). Если вы хотите получить строку в более удобном виде, то ее нужно преобразовать в тип TCHAR.

TCHAR и функции, начинающиеся с _t (например, _tcscpy()) были разработаны для управления строками Unicode и ANSI с использованием одинакового исходного кода. Наверняка, вы раньше писали программы с использованием ANSI-строк и ANSI-функций, поэтому далее в этой статье я буду обращаться к типу char, вместо TCHAR, чтобы лишний раз вас не смущать. Однако, вы должны знать, что есть такой тип – TCHAR, хотя бы для того, чтобы не задавать лишних вопросов, когда встретите его в программах, написанных другими разработчиками.

Когда вы получаете строку из метода COM, вы можете преобразовать ее в строку char одним из следующих способов:

1. Вызвать функцию API WideCharToMultiByte().

2. Вызвать функцию CRT wcstombs().

3. Использовать конструктор CString или оператор присваивания (только в MFC).

4. Использовать макрос преобразования ATL.

Особенности Unicode

С другой стороны, вы можете лишь хранить строку Unicode, если с ней не требуется делать что-либо еще. Если вы создаете консольное приложение, то вывод на экран строки Unicode можно осуществить с помощью глобальной переменной std::wcout, например:

wcout << wszSomeString;

Однако, имейте ввиду, что wcout предполагает, что все "входящие" строки имеют формат Unicode, поэтому если вы имеете любую "нормальную" строку, то для вывода нужно использовать std::cout. Если вы используете строковые литералы, для перевода в Unicode ставьте перед ними символ L, например:

wcout << L"The Oracle says…" << endl << wszOracleResponse;

Если вы используете строки Unicode, вы должны знать о следующих ограничениях:

• С этими строками вы должны использовать функции вида wcsXXX(), например wcslen().

• За редким исключением, вы не должны передавать строки Unicode функциям Windows API в ОС Windows 9x. Чтобы обеспечить переносимость кода между платформами 9x и NT, вы должны использовать типы TCHAR, как это описано в MSDN. Объединим все вместе – Примеры Программ

Здесь приведены два примера, иллюстрирующие концепции COM, которые обсуждались ранее в этой статье.

Использование объекта COM с одним интерфейсом

Первый пример показывает, как можно использвать объект COM, содержащий единственный интерфейс. Это простейший случай из тех, которые вам могут встретиться. Программа использует содержащийся в оболочке CO-класс Active Desktop для получения имени файла "обоев", которые установлены в данный момент. Чтобы этот код был работоспособен, вам может потребоваться установить Active Desktop.

Мы должны осуществить следующие шаги:

1. Инициализировать библиотеку COM.

2. Создать COM-объект, используемый для взаимодействия с Active Desktop и получить интерфейс IActiveDesktop.

3. Вызвать метод COM-объекта GetWallpaper().

4. Если GetWallpaper() завершился успешно, вывести имя файла "обоев" на экран.

5. Освободить интерфейс.

6. Разинициализировать библиотеку COM.

WCHAR wszWallpaper[MAX_PATH];

CString strPath;

HRESULT hr;

IActiveDesktop* pIAD;

// 1. Инициализация библиотеки COM (заставляем Windows загрузить библиотеки DLL). Обычно

// вам нужно делать это в функции InitInstance() или подобной ей. В MFC-приложениях

// можно также использовать функцию AfxOleInit().

CoInitialize(NULL);

// 2. Создаем COM-объект, используя CO-класс Active Desktop, поставляемый оболочкой.

// Четвертый параметр сообщает COM какой именно интерфейс нам нужен (IActiveDesktop).

hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&pIAD);

if (SUCCEEDED(hr)) {

// 3. Если COM-объект был создан, то вызываем его метод GetWallpaper().

hr = pIAD->GetWallpaper(wszWallpaper, MAX_PATH, 0);

if (SUCCEEDED(hr)) {

// 4. Если GetWallpaper() завершился успешно, выводим полученное имя файла.

// Заметьте, что я использую wcout для отображения Unicode-строки wszWallpaper.

// wcout является Unicode-эквивалентом cout.

wcout << L"Wallpaper path is:\n " << wszWallpaper << endl << endl;

} else {

cout << _T("GetWallpaper() failed.") << endl << endl;

}

// 5. Освобождаем интерфейс.

pIAD->Release();

} else {

cout << _T("CoCreateInstance() failed.") << endl << endl;

}

// 6. Разинициализируем библиотеку COM. В приложениях MFC этого не требуется –

// MFC делает это автоматически.

CoUninitialize();

В этом примере я использовал std::wcout для отображения строки Unicode wszWallpaper.

Использование COM-объекта, включающего несколько интерфейсов

Второй пример показывает, как можно использовать QueryInterface() для получения единственного интерфейса COM-объекта. В этом примере используется CO-класс Shell Link, содержащийся в оболочке, для создания ярлыка для файла "обоев", имя которого мы получили в предыдущем примере.

Программа состоит из следующих шагов:

1. Инициализация библиотеки COM.

2. Создание объекта COM, используемого для создания ярлыков, и получение интерфейса IShellLink.

3. Вызов метода SetPath() интерфейса IShellLink.

4. Вызов метода QueryInterface() объекта COM и получение интерфейса IPersistFile.

5. Вызов метода Save() интерфейса IPersistFile.

6. Освобождение интерфейсов.

7. Разинициализация библиотеки COM.

CString sWallpaper = wszWallpaper; // Конвертация пути к "обоям" в ANSI

IShellLink* pISL;

IPersistFile* pIPF;

// 1. Инициализация библиотеки COM (заставляем Windows загрузить библиотеки DLL). Обычно

// вам нужно делать это в функции InitInstance() или подобной ей. В MFC-приложениях

// можно также использовать функцию AfxOleInit().

CoInitialize(NULL);

// 2. Создание объекта COM с использованием CO-класса Shell Link, поставляемого оболочкой.

// 4-й параметр указывает на то, какой интерфейс нам нужен (IShellLink).

hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pISL);

if (SUCCEEDED(hr)) {

// 3. Устанавливаем путь, на который будет указывать ярлык (к файлу "обоев").

hr = pISL->SetPath(sWallpaper);

if (SUCCEEDED(hr)) {

// 4. Получение второго интерфейса (IPersistFile) от объекта COM.

hr = pISL->QueryInterface(IID_IPersistFile, (void**)&pIPF);

if (SUCCEEDED(hr)) {

// 5. Вызов метода Save() для сохранения ярлыка в файл. Первый параметр

// является строкой Unicode.

hr = pIPF->Save(L"C:\\wallpaper.lnk", FALSE);

// 6a. Освобождение интерфейса IPersistFile.

pIPF->Release();

}

}

// 6b. Освобождение интерфейса IShellLink.

pISL->Release();

}

// Где-то здесь должен быть код для обработки ошибок.

// 7. Разинициализация библиотеки COM. В приложениях MFC этого делать

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Алекс Jenter читать все книги автора по порядку

Алекс Jenter - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование на Visual C++. Архив рассылки отзывы


Отзывы читателей о книге Программирование на Visual C++. Архив рассылки, автор: Алекс Jenter. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x