Функция MrmCreateResourceIndexerFromPreviousSchemaFile

Создает индексатор ресурсов, который может создавать файлы PRI, совместимые с существующими файлами PRI. Эта функция необходима только в довольно ограниченных сценариях; Дополнительные сведения см. в примечаниях .

COM необходимо инициализировать (например, вызывая CoInitializeEx) перед использованием этой функции.

Синтаксис

HRESULT HRESULT MrmCreateResourceIndexerFromPreviousSchemaFile(
  _In_     PCWSTR                   projectRoot,
  _In_     MrmPlatformVersion       platformVersion,
  _In_opt_ PCWSTR                   defaultQualifiers,
  _In_     PCWSTR                   schemaFile,
  _Inout_  MrmResourceIndexerHandle *indexer
);

Параметры

projectRoot [in]

Тип: PCWSTR

Корневой каталог, из которого будут вычисляться некоторые пути к файлам. Как правило, это корневой каталог исходного проекта, но может отличаться. Дополнительные сведения см. в ресурсах файлов в MRM .

platformVersion [in]

Тип: MrmPlatformVersion

Версия платформы (targetOsVersion), используемая для созданного файла конфигурации. Большинство вызывающих абонентов должны просто использовать MrmPlatformVersion_Windows10_0_0_5

defaultQualifiers [in, необязательный]

Тип: PCWSTR

Список квалификаторов ресурсов по умолчанию. Например, "language-en-US_scale-100". Дополнительные сведения о квалификаторов см. в разделе "Квалификаторы" в MRM.

schemaFile [in]

Тип: PCWSTR

Путь к существующему файлу PRI, схема которого требуется сопоставить, или путь к XML-дампа, содержащему схему файла PRI для сопоставления. Дополнительные сведения о создании дампа XML см. в mrmDumpPriFile .

индексатор [in, out]

Тип: MrmResourceIndexerHandle*

Указатель на дескриптор индексатора ресурсов. При успешном возвращении он будет содержать дескриптор индексатора ресурсов. После использования индексатора необходимо освободить индексатор через MrmDedexerIndexerAndMessages.

Возвращаемое значение

Тип: HRESULT

S_OK, если функция выполнена успешно, в противном случае другое значение. Используйте макросы SUCCESSED или FAILED (определенные в winerror.h), чтобы определить успешность или сбой.

Замечания

Эта функция эквивалентна mrmCreateResourceIndexer , за исключением того, что индексатор создаст файлы PRI, которые гарантированно включают все имена ресурсов и индексы предоставленного файла схемы в дополнение к новым ресурсам, добавленным в индексатор. Это гарантирует, что новый файл PRI совместим с схемой с исходным файлом schemaFile, даже если некоторые ресурсы были пропущены.

В большинстве распространенных сценариев эта функция не требуется. Если одно из следующих действий применяется, вам не нужно беспокоиться о создании файлов PRI, совместимых с схемой:

  • Вы используете один автономный файл PRI (который является единственным поддерживаемым вариантом для распакованных приложений); Или
  • При перестроении основного PRI всегда выполняется перестроение pris пакета ресурсов.

Эта функция необходима только в довольно ограниченном сценарии, а именно:

  1. У вас есть основной файл PRI и один или несколько файлов PRI пакета ресурсов; И
  2. Выполняется перестроение основного файла PRI (но не файлов PRI пакета ресурсов); И
  3. Удаление одного или нескольких ресурсов из основного файла PRI может быть (или может быть).

В этом случае установка ссылки schemaFile на исходный основной файл PRI гарантирует совместимость нового основного файла PRI с существующими пакетами ресурсов, обеспечивая наличие значений индексов заполнителей для удаленных ресурсов.

Примечание. Новый файл PRI будет содержать все имена ресурсов (и индексы) из исходного файла, но будут содержать только значения для ресурсов, явно добавленных в индексатор. Новый файл не наследует (копирует) значения из исходного файла PRI.

Пример

Предположим, что файл PRI "original.pri" содержит три ресурса для английского языка:

Имя Индекс Ценность
ms-resource:///strings/test 0 TestValue
ms-resource:///strings/save 1 "Сохранить"
ms-resource:///strings/delete 2 "Удалить"

Теперь рассмотрим следующий фрагмент кода (опущена проверка ошибок):

// Create an indexer with the existing schema
MrmResourceIndexerHandle indexer{};
MrmCreateResourceIndexerFromPreviousSchemaFile(L"C:\\MyProject", MrmPlatformVersion_Windows10_0_0_5, L"language-en", L"original.pri", &indexer);

// Add values for "save" and "delete".
// Note that there is no "test" resource added, since we don't need it anymore.
MrmIndexString(indexer, L"ms-resource:///strings/save", L"Save", L"language-en");
MrmIndexString(indexer, L"ms-resource:///strings/delete", L"Delete", L"language-en");

// Save the file
MrmCreateResourceFile(indexer, MrmPackagingModeStandaloneFile, MrmPackagingOptionsNone, L"C:\\");

Новый файл ресурса будет содержать следующий код для английского языка:

Имя Индекс Ценность
ms-resource:///strings/test 0 <нет>
ms-resource:///strings/save 1 "Сохранить"
ms-resource:///strings/delete 2 "Удалить"

Это гарантирует, что индексы ресурсов для save и delete остаются одинаковыми (1 и 2 соответственно), чтобы пакеты ресурсов с локализованными версиями "Сохранить" и "Удалить" будут соответствовать. Обратите внимание, что если код приложения по-прежнему пытался загрузить test ресурс, он завершится сбоем во время выполнения (по крайней мере на английском языке), так как не определены кандидаты.

Чтобы проиллюстрировать, почему это важно, давайте посмотрим, что произойдет, если новый файл PRI не был создан с базовой схемой. В этом случае новый файл PRI будет содержать следующее:

Имя Индекс Ценность
ms-resource:///strings/save 0 "Сохранить"
ms-resource:///strings/delete 1 "Удалить"

Теперь запросы delete поиска (индекс 1) будут получать правильную строку "Удалить" на английском языке, но на других языках она будет извлекать локализованную версию "Сохранить" (так как индекс 1 используется для индексирования ресурса save ). Это приведет к тому, что пользователи видят UX с меткой "Сохранить" (на локальном языке), которая фактически выполнила операцию удаления - серьезная ошибка.

Требования

Требование Ценность
Минимальный поддерживаемый клиент
Windows 10 версии 1803 [только классические приложения]
Минимальный поддерживаемый сервер
Windows Server [только классические приложения]
Header
MrmResourceIndexer.h
Библиотека
Mrmsupport.lib
DLL
Mrmsupport.dll

См. также

MrmCreateResourceIndexer

MrmCreateResourceIndexerFromPreviousPriData

MrmCreateResourceIndexerFromPreviousPriFile

MrmCreateResourceIndexerFromPreviousSchemaData

API индексирования ресурсов пакета (PRI) и пользовательские системы сборки