Чтобы сократить используемое место и улучшить безопасность, интерфейсы .X позволяют вам убрать все объявления шаблонов из .X файлов и вставить их в исполняемый модуль. Это означает, что вместо того, чтобы определять шаблоны в .X файлах, необходимо определять их в программе. Не волнуйтесь - это не настолько сложно, насколько звучит. Как вы увидите чуть позже, Microsoft взяла на себя всю тяжелую работу, определив стандартные шаблоны в нескольких заголовочных файлах, упростив все насколько это возможно.
Чтобы зарегистрировать стандартный шаблон (или любой другой) в вашей программе, вам необходимо вызвать функцию IDirectXFile::RegisterTemplates.
HRESULT IDirectXFile::RegisterTemplates(
LPVOID pvData, // буфер содержащий определение шаблона DWORD cbSize) ; // количество байт информации
Параметр pvData является просто буфером данных, который содержит определение шаблона в таком же формате, как вы видели в .X файле. Например, вы можете определить буфер шаблона так:
char *TeMplates = "
"xof 0303txt 0032 \ template CustoMTemplate { \
<4c944 580-9e9a-11cf-ab43-012 0af71e43 3> \
DWORD Length; \
array DWORD Values[Length] ; \
Возвращаясь к функции RegisterTemplates, нужно сказать, что параметр cbSize представляет собой размер буфера данных шаблона, который в настотящем случае вы определяете, используя функцию strlen буфера "Templates". Соединив,
вы можете зарегистрировать шаблон, определенный в буфере "Templates", используя следующий код:
pFile->RegisterTemplates(Templates , strlen(Templates));
Вернемся к самой теме - регистрирование стандартных шаблонов. Вы видели, как работает функция RegisterTemplates. Для того чтобы зарегистрировать стандартные шаблоны, вам необходимо включить два добавочных файла в ваш проект -"rmxftmpl.h" и "rmxfguid.h". Эти два файла содержат определения и GUID стандартных шаблонов соответственно.
Внутри файла "rmxftmpl.h" вы найдете буфер данных шаблона D3DRMX-TEMPLATES и макрос D3DRM_XTEMPLATE_BYTES. Они используются при вызове RegisterTemplates для регистрирования стандартных шаблонов, как вы можете видеть здесь:
pFile->RegisterTemplates(D3DRM_XTEMPLATES, \
D3DRM_XT.EMPLAT.E_BYT.ES) ;
Правильно, просто вызвав приведенный выше кусочек кода, вы успешно зарегистрируете стандартные шаблоны, и вы готовы продолжать! Но сначала небольшой совет: как только вы начнете использовать формат .X для ваших специализированных данных и шаблонов, не забывайте, что RegisterTemplates отлично регистрирует и ваши шаблоны!
Замечание. Отметьте, что в определении шаблона "Templates" используется наклонная черта влево для обозначения новой линии, и после этого следует стандартный заголовок .X файла.
Совет. Для того, чтобы запомнить "rmxftmpl.h" и "rmxfguid.h", просто помните, что "rmxf "это .Xфайл сохраненного режима, "tmpl" означает шаблон и "guid" означает глобальноуникальный идентификатор.