Программирование на Visual C++. Архив рассылки
Шрифт:
Когда вы получаете строку из метода COM, вы можете преобразовать ее в строку char одним из следующих способов:
1. Вызвать функцию API WideCharToMultiByte.
2. Вызвать функцию CRT wcstombs.
3. Использовать конструктор CString или оператор присваивания (только в MFC).
4. Использовать макрос преобразования ATL.
С другой стороны, вы можете лишь хранить строку Unicode, если с ней не требуется делать что-либо еще. Если вы создаете консольное приложение, то вывод на экран
Однако, имейте ввиду, что wcout предполагает, что все "входящие" строки имеют формат Unicode, поэтому если вы имеете любую "нормальную" строку, то для вывода нужно использовать std::cout. Если вы используете строковые литералы, для перевода в Unicode ставьте перед ними символ L, например:
Если вы используете строки Unicode, вы должны знать о следующих ограничениях:
• С этими строками вы должны использовать функции вида wcsXXX, например wcslen.
• За редким исключением, вы не должны передавать строки Unicode функциям Windows API в ОС Windows 9x. Чтобы обеспечить переносимость кода между платформами 9x и NT, вы должны использовать типы TCHAR, как это описано в MSDN. Объединим все вместе – Примеры Программ
Здесь приведены два примера, иллюстрирующие концепции COM, которые обсуждались ранее в этой статье.
Первый пример показывает, как можно использвать объект COM, содержащий единственный интерфейс. Это простейший случай из тех, которые вам могут встретиться. Программа использует содержащийся в оболочке CO-класс Active Desktop для получения имени файла "обоев", которые установлены в данный момент. Чтобы этот код был работоспособен, вам может потребоваться установить Active Desktop.
Мы должны осуществить следующие шаги:
1. Инициализировать библиотеку COM.
2. Создать COM-объект, используемый для взаимодействия с Active Desktop и получить интерфейс IActiveDesktop.
3. Вызвать метод COM-объекта GetWallpaper.
4. Если GetWallpaper завершился успешно, вывести имя файла "обоев" на экран.
5. Освободить интерфейс.
6. Разинициализировать библиотеку COM.
В этом примере я использовал std::wcout для отображения строки Unicode wszWallpaper.
Второй пример показывает, как можно использовать QueryInterface для получения единственного интерфейса COM-объекта. В этом примере используется CO-класс Shell Link, содержащийся в оболочке, для создания ярлыка для файла "обоев", имя которого мы получили в предыдущем примере.
Программа состоит из следующих шагов:
1. Инициализация библиотеки COM.
2. Создание объекта COM, используемого для создания ярлыков, и получение интерфейса IShellLink.
3. Вызов метода SetPath интерфейса IShellLink.
4. Вызов метода QueryInterface объекта COM и получение интерфейса IPersistFile.
5. Вызов метода Save интерфейса IPersistFile.
6. Освобождение интерфейсов.
7. Разинициализация библиотеки COM.