Т. к. дизайн .X файлов является открытым, вы должны предопределять каждый используемый с DirectX шаблон, чтобы понять, как получить доступ к данным шаблона. Обычно шаблоны определяются внутри .X файла, хотя вы можете определять их и в вашей программе (как я замечал ранее).
Вы определяете шаблон (содержащийся в .X файле), назначая ему уникальное имя, следующее после слова "template", как я сделал в далее. (Обратите внимание на открывающуюся скобку, обозначающую начало определения шаблона.)
template ContactEntry {
Хорошо, вы начали объявление шаблона, который будете использовать для хранения контактной информации человека. Назовем класс шаблона "ContactEntry", как вы видите из кода. Даже если вы присвоили вашему шаблону уникальное имя класса, вам необходимо сделать еще один шаг - присвоить уникальное идентификационное число - GUID.
Когда вы будете читать .X файлы в ваших программах, у вас будет доступ только к GUID каждого шаблона, но не к их именам. Имена классов важны только для ваших объектов данных .X файлов; вам необходимо, чтобы ваша программа различала эти объекты данных, используя их шаблонный GUID.
Для определения GUID для вашего шаблона запустите программу "guidgen.exe", поставляемую вместе с компилятором "Microsoft Visual C/C++" (находящуюся в инсталяционной директории \Common\Tools вашего MSVC). После нахождения и запуска программы "guidgen.exe" перед вами появится небольшое диалоговое окно, показанное на рис. 3.1.
Рис. 3.1. Диалоговое окно "Create GUID" ("Создать GUID") программы "guidgen.exe" позволяет вам создаватьуникальные идентификационные числа в различныхформатах
Как вы можете видеть на рис. 3.1, диалоговое окно "Create GUID" позволяет вам выбрать формат создаваемого GUID. В данном случае вы должны использовать формат №2 DEFINE_GUID(...). Выберите данную опцию и нажмите кнопку "Сору" ("Копировать").
Теперь абсолютно уникальное идентификационное число находится в буфере обмена, ожидая пока вы вставите его в ваш код. Вернитесь к создаваемому .X файлу и вставьте содержимое буфера обмена в ваше объявление шаблона.
template ContactEntry {
// {4C9D055B-C64D-4bfe-A7D9-981F507E4 5FF} DEFINE_GUID («name»,
0x4c9d055b, 0xc64d, 0x4bfe, 0xa7, 0xd9, 0x98, \ 0x1f, 0x50, 0x7e, 0x45, 0xff);

Ой! Здесь немного больше текста, чем необходимо для шаблона, поэтому вырежем макрос DEFINE_GUID и вставим его в исходный код проекта. Да, все правильно - каждый определенный вами шаблон требует соответствующего определения GUID (например, используя макрос DEFINEGUID) в вашем коде. Это означает, что вам необходимо подключить заголовочный файл "initguid.h" в ваш код и использовать DEFINE_GUID, как я сделал тут.
#include "initguid.h"
// В начале файла исходного кода добавьте DEFINE_GUIDs DEFINE_GUID(ContactEntry, \
0x4c9d055b, 0xc64d, 0x4bfe, 0xa7, 0xd9, 0x98, \
0x1f, 0x50, 0x7e, 0x45, 0xff);
Заметьте, что в макросе DEFINE_GUID я заменил "«name»" на фактическое название класса шаблона, который я определяю. В данном случае я использую "ContactEntry " в качестве названия макроса. После этого макрос "ContactName" будет содержать указатель на GUID моего шаблона (который должен совпадать с GUID шаблона, используемого в .X файле).
Возвращаясь к шаблону "ContactEntry ", вам также необходимо удалить тег комментария из вставленного текста и изменить кавычки GUID на угловые, как я сделал тут:
template ContactEntry {
<4C9D05 5B-C64D-4bfe-A7D9-981F5 07E4 5FF>
Теперь вы готовы продолжить и определить данные шаблоны. Шаблоны очень похожи на классы и структуры С; они содержат переменные и указатели на другие шаблоны, наряду с ограничениями доступа. Типы используемых данных практически полностью совпадают с используемыми в С. В таблице 3.1 показаны типы данных, которые вы можете использовать для определения шаблонов, и их аналоги в C/C++.
Таблица 3.1. Типы данных шаблонов .X
|
Тип данных |
Описание |
|
WORD |
16-битное число (short) |
|
DWORD |
32-битное число (32-битное int или long) |
|
FLOAT |
вещественное число IEEE (float) |
|
DOUBLE CHAR |
64-битное вещественное число (double) 8-битное знаковое число (signed char) |
|
Таблица3.1 . Типыданных шаблонов .X (Продолжение) |
|
|
Тип данных |
Описание |
|
UCHAR |
8-битное беззнаковое число (unsigned char) |
|
byte |
8-битное беззнаковое число (unsigned char) |
|
string |
строка, оканчивающаяся нулем (char[ ]) |
|
Array |
Массив определенного типа данных ([ ]) |
Совсем как в объявлении переменной C/C++ , вы указываете ключевое слово типа данных и имя экземпляра, заканчивая точкой с запятой (означает окончание объявления переменной)
DWORD Value;
В таблице 3.1 вы могли заметить ключевое слово "array", которое определяет массив элементов типа данных. Для определения массива вы задаете ключевое слово "array", тип данных, имя экземпляра и размер массива (заключенный в квадратные скобки). Например, для объявления массива из 20 элементов типа "STRING" вы можете использовать
array STRING Text[2 0];
Замечание. Замечательным свойством массивов является возможность использования другого типа данных для определения размера массива, как я сделал тут:
DWORD ArraySize;
array STRING Names[ArraySize] ;
Теперь вернемся к шаблону "ContactEntry" и определим имя человека, телефон и возраст. Эти три переменные - две строки (имя и номер телефона) и одно численное значение (возраст) - могут быть определены в шаблоне "ContactEntry" как показано здесь.
template ContactEntry {
<4C9D0 55B-C64D-4bfe-A7D9-981F5 07E45FF>
STRING Name; // имя
STRING PhoneNumber; // телефон
DWORD Age; // возраст
}
Замечательно! Чтобы закончить объявление шаблона, добавьте закрывающуюся скобку, и он готов к использованию.
⇐Работа с .X шаблонами и объектами данных || Оглавление || Создание объектов данных из шаблонов⇒