Função MrmCreateResourceIndexerFromPreviousSchemaFile

Cria um indexador de recursos que pode criar ficheiros PRI compatíveis com ficheiros PRI existentes. Esta função é necessária apenas em cenários relativamente limitados; ver Observações para mais informações.

O COM deve ser inicializado (por exemplo, chamando o CoInitializeEx) antes de usar esta função.

Sintaxe

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

Parâmetros

projectRoot [em]

Tipo: PCWSTR

O diretório raiz a partir do qual serão calculados alguns caminhos de ficheiro. Normalmente, este será o diretório raiz do seu projeto de origem, mas pode ser diferente. Consulte os recursos do ficheiro no MRM para mais informações.

Versão da plataforma [em]

Tipo: MrmPlatformVersion

A versão da plataforma (targetOsVersion) deve ser usada para o ficheiro de configuração gerado. A maioria dos chamadores deve simplesmente usar MrmPlatformVersion_Windows10_0_0_5

defaultQualifiers [em, opcional]

Tipo: PCWSTR

Uma lista de qualificadores padrão de recursos. Por exemplo, "language-en-US_scale-100". Para mais informações sobre qualificados, consulte Qualificados em MRM.

schemaFile [em]

Tipo: PCWSTR

O caminho para um ficheiro PRI existente cujo esquema precisa de corresponder, ou o caminho para um dump XML contendo o esquema do ficheiro PRI a corresponder. Consulte MrmDumpPriFile para informações sobre como criar um dump XML.

indexador [entrada, saída]

Tipo: MrmResourceIndexerHandle*

Um apontador para um handle indexador de recursos. Em caso de retorno bem-sucedido, isto conterá um handle para um indexador de recursos. Deve libertar o indexador através do MrmDestroyIndexerAndMessages depois de o usar.

Valor de retorno

Tipo: HRESULT

S_OK se a função tivesse sucesso, caso contrário algum outro valor. Use as macros SUCCEEDED ou FAILED (definidas em winerror.h) para determinar sucesso ou fracasso.

Observações

Esta função é equivalente ao MrmCreateResourceIndexer , exceto que o indexador criará ficheiros PRI que garantem incluir todos os nomes de recursos e índices do schemaFile fornecido, além de quaisquer novos recursos adicionados ao indexador. Isto garante que o novo ficheiro PRI é "compatível com o esquema" com o schemaFile original, mesmo que alguns recursos tenham sido omitidos.

Para a maioria dos cenários comuns, esta função não é necessária. Se alguma das seguintes condições se aplicar, não precisa de se preocupar em construir ficheiros PRI compatíveis com esquemas:

  • Utiliza-se um único ficheiro PRI autónomo (que é a única opção suportada para aplicações não empacotadas); ou
  • Reconstróis sempre os teus PRIs do pacote de recursos ao reconstruíres o teu PRI principal.

Esta função é necessária apenas num cenário relativamente limitado, nomeadamente:

  1. Tem um ficheiro PRI principal e um ou mais ficheiros PRI do pacote de recursos; e
  2. Estás a reconstruir o ficheiro PRI principal (mas não os ficheiros PRI do pacote de recursos); e
  3. Estás (ou podes estar) a remover um ou mais recursos do ficheiro principal do PRI.

Nesta situação, definir a referência schemaFile para o ficheiro principal PRI original garantirá que o novo ficheiro principal PRI é compatível com os pacotes de recursos existentes, garantindo que existem valores de índice provisórios para os recursos removidos.

Nota: O novo ficheiro PRI conterá todos os nomes de recursos (e índices) do ficheiro original, mas só conterá valores para os recursos explicitamente adicionados ao indexador. O novo ficheiro não herda (copia) os valores do ficheiro PRI original.

Exemplo

Assuma que o ficheiro PRI "original.pri" contém três recursos para inglês:

Nome Índice Valor
ms-resource:///strings/test 0 "TestValue"
ms-resource:///strings/save 1 "Salvar"
ms-resource:///strings/delete 2 "Apagar"

Agora considere o seguinte excerto de código (verificação de erros omitida):

// 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:\\");

O novo ficheiro de recursos conterá o seguinte para Inglês:

Nome Índice Valor
ms-resource:///strings/test 0 <nenhum>
ms-resource:///strings/save 1 "Salvar"
ms-resource:///strings/delete 2 "Apagar"

Isto garante que os índices de recursos de save e delete permanecem iguais (1 e 2, respetivamente), de modo que os pacotes de recursos com versões localizadas de "Guardar" e "Eliminar" coincidam. Note que, se o código da aplicação ainda tentasse carregar o test recurso, falharia em tempo de execução (pelo menos em inglês), pois não existem candidatos definidos.

Para ilustrar porque isto é importante, vamos ver o que acontece se o novo ficheiro PRI não tivesse sido criado com o esquema base. Nesse caso, o novo ficheiro PRI conteria o seguinte:

Nome Índice Valor
ms-resource:///strings/save 0 "Salvar"
ms-resource:///strings/delete 1 "Apagar"

Agora, as pesquisas de recursos para delete (índice 1) recuperavam a cadeia correta "Delete" em inglês, mas noutras línguas recuperavam a versão localizada de "Save" (já que o índice 1 costumava ser o índice do save recurso). Isto levaria os utilizadores a ver UX rotulado como "Guardar" (na sua língua local) que realmente realizava uma operação de eliminação – um bug grave.

Requisitos

Requisito Valor
Cliente mínimo suportado
Windows 10, versão 1803 [apenas aplicações de ambiente de trabalho]
Servidor mínimo suportado
Windows Server [apenas aplicações de ambiente de trabalho]
Cabeçalho
MrmResourceIndexer.h
Biblioteca
Mrmsupport.lib
DLL
Mrmsupport.dll

Consulte também

MrmCreateResourceIndexer

MrmCreateResourceIndexerFromPreviousPriData

MrmCreateResourceIndexerFromPreviousPriFile

MrmCreateResourceIndexerFromPreviousSchemaData

APIs de indexação de recursos de pacotes (PRI) e sistemas de construção personalizados