Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Графика -> Гончаров Д. -> "DirectX 7.0 Для программистов" -> 114

DirectX 7.0 Для программистов - Гончаров Д.

Гончаров Д., Салихо Т. DirectX 7.0 Для программистов — Спб.: Питер, 2001. — 528 c.
ISBN 5-318-00173-4
Скачать (прямая ссылка): dirext7dlyaprogrammistov2001.djvu
Предыдущая << 1 .. 108 109 110 111 112 113 < 114 > 115 116 117 118 119 120 .. 229 >> Следующая

//Обрабатываем ошибку
Функции CoCreatelnstance необходимо передать: GUID класса создаваемого интерфейса (в нашем случае — CLSIDDirectMusicLoader), указатель на контроллер агрегирования (мы не используем агрегирование, поэтому передается NULL), контекст запускаемого кода (мы применяем внутрипроцессный сервер — в адресном пространстве нашего процесса), GUID создаваемого интерфейса (IID IDirectMusic Loader) и адрес переменной, в которую будет помещен указатель на запрашиваемый интерфейс.
Загрузка MIDI-файла
Имея на руках указатель на интерфейс загрузчика, можно начинать непосредственную загрузку содержимого MIDI-файла в память. Однако перед этим нужно установить каталог, в котором загрузчик будет производить поиск требуемого файла. Сделать это можно при помощи метода интерфейса IDirectMusicLoader: HRESULT SetSearchDirectory(
REFGUID rguidClass,
WCHAR* pwszPath,
BOOL fClear
);
Первым параметром этого метода необходимо указать GUID класса объектов, для которых устанавливается каталог поиска. Передавая значение GUID DirectMusic All Types, можно установить единый каталог поиска для файлов всех типов. Второй параметр должен содержать путь для требуемого каталога. Обратите внимание, что путь должен передаваться в формате Unicode (об использовании Unicode рассказывалось в уроке 1).
Третий параметр позволяет произвести очистку информации об имеющихся объектах, перед тем как каталог поиска будет установлен. Таким способом можно подавить доступ к объектам из предыдущего каталога, возможно, имеющим такие же имена, что и объекты устанавливаемого каталога.
После установления каталога поиска доступ к объектам может осуществляться только по имени, без указания полного пути. Процесс установки обычно выполняется один раз в начале программы. Если вызов метода завершился успешно, то будут возвращены либо значение S 0K, либо S FALSE, если запрашиваемый каталог уже был установлен.
В качестве примера установим загрузку из текущего каталога процесса.
CHAR szDir[MAX_PATH];
WCHAR wszDir[MAX_PATH];
GetCurrentDi rectory(MAXPATH,szDi r); mbstowcs(wszDir, szDir, MAXPATH);
hRet*pDMLoader->SetSearchDirectory( GUID DirectMusicAllTypes, wszDir, FALSE ); if(FAILED(hRet))
//Обрабатываем ошибку
DirectMusic: первые впечатления
265
В приведенном примере определяются две строки: одна для хранения текущего каталога в ANSI-формате, другая — в формате Unicode. Получив текущий каталог процесса при помощи функции GetCurrentDi rectory, мы выполняем преобразование полученной строки в Unicode при помощи функции mbstowcs. Далее следует простой вызов метода SetSearchDi rectory для установки каталога поиска файлов всех типов, на что указывает значение GUIDDirectMusicAllTypes.
После того как каталог поиска был успешно установлен, можно приступать к собственно загрузке. Для этого в программе нужно определить структуру типа DMUSOBJECTDESC и правильно заполнить ее поля. Для загрузки файла формата MIDI этот процесс может выглядеть следующим образом:
DMUS OBJECTDESC dod;
dod.dwSize - sizeof(DMUS OBJECTDESC);
dod.guidClass - CLSIDDirectMusicSegment:
wcscpy( dod.wszFileName, L"test.mid" );
dod.dwValidData - DMUS_OBJ_CLASS | DMUSOBJFILENAME;
Поле dwSize заполняется размером всей структуры. Далее в поле guidClass заносится глобальный идентификатор класса объекта, описываемый данной структурой. Значение CLSID DirectMusicSegment указывает на необходимость загрузки музыкального сегмента. Существенным является то, что в качестве сегмента могут выступать как MIDI-файлы, так и файлы, созданные, например, при помощи DirectMusic Producer. Загрузка такого файла не будет отличаться ничем от описываемого здесь процесса. В поле wszFileName копируется имя файла, который требуется загрузить. Поскольку для указания имени, так же как и для указания каталога, используется Unicode, то для копирования строки, содержащей имя, необходимо применять функцию wcscpy. Поле dwVal idData должно содержать флаги, сообщающие DirectMusic о том, какие поля структуры DMUS OBJECTDESC содержат корректную информацию. Поскольку мы использовали лишь поля guidClass и wszFileName, то для указания корректно заполненных полей следует воспользоваться флагами DMUS_OBJ_CLASS и DMUS OBJ_FILENAME.
После инициализации структуры DMUS OBJECTDESC загрузить объект можно вызовом следующего метода интерфейса IDirectMusicLoader:
HRESULT GetObject(
LPDMUSOBJECTDESC pDESC,
REFIID riid,
LPVOID FAR * ppv
);
Первым параметром этому методу следует передать адрес инициализированной структуры типа DMUS OBJECTDESC. Второй параметр, riid, содержит идентификатор, определяющий тип интерфейса, указатель на который будет записан по адресу, передаваемому третьим параметром. Например, если третий параметр метода — адрес указателя на интерфейс IDirectMusicSegment (что будет иметь место в нашем случае), то вторым параметром должно быть значение IID IDirectMusicSegment.
В случае удачного завершения метод GetObject возвращает значение S 0K. Если объект загружен лишь частично, например не удалось загрузить один из его компонентов, то возвращается значение DMUS S PARTIALLOAD. Кроме того, возможной причиной может стать недоступность файла GM.DLS, содержащего набор инструментов по умолчанию.
Предыдущая << 1 .. 108 109 110 111 112 113 < 114 > 115 116 117 118 119 120 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.