De functie MrmCreateResourceIndexerFromPreviousSchemaFile

Hiermee maakt u een resource-indexeerfunctie waarmee PRI-bestanden kunnen worden gemaakt die compatibel zijn met bestaande PRI-bestanden. Deze functie is alleen nodig in redelijk beperkte scenario's; zie Opmerkingen voor meer informatie.

COM moet worden geïnitialiseerd (bijvoorbeeld door CoInitializeEx aan te roepen) voordat u deze functie gebruikt.

Syntaxis

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

Parameterwaarden

projectRoot [in]

Type: PCWSTR

De hoofdmap waaruit sommige bestandspaden worden berekend. Dit is meestal de hoofdmap van uw bronproject, maar kan verschillen. Zie Bestandsresources in MRM voor meer informatie.

platformVersion [in]

Type: MrmPlatformVersion

De platformversie (targetOsVersion) die moet worden gebruikt voor het gegenereerde configuratiebestand. De meeste bellers moeten alleen MrmPlatformVersion_Windows10_0_0_5 gebruiken

defaultQualifiers [in, optioneel]

Type: PCWSTR

Een lijst met standaardresourcekwalificaties. Bijvoorbeeld 'language-en-US_scale-100'. Zie Kwalificatie in MRM voor meer informatie over kwalificaties.

schemaFile [in]

Type: PCWSTR

Het pad naar een bestaand PRI-bestand waarvan het schema moet overeenkomen, of het pad naar een XML-dump met het schema van het PRI-bestand dat moet overeenkomen. Zie MrmDumpPriFile voor informatie over het maken van een XML-dump.

indexeerfunctie [in, uit]

Type: MrmResourceIndexerHandle*

Een aanwijzer naar een bronindexeergreep. Bij geslaagde terugkeer bevat dit een ingang voor een resource-indexeerfunctie. U moet de indexeerfunctie vrij maken via MrmDestroyIndexerAndMessages nadat u deze hebt gebruikt.

Retourwaarde

Type: HRESULT

S_OK als de functie is geslaagd, anders een andere waarde. Gebruik de geslaagde of mislukte macro's (gedefinieerd in winerror.h) om te bepalen of de geslaagde of mislukte macro's zijn geslaagd.

Opmerkingen

Deze functie komt overeen met MrmCreateResourceIndexer , behalve dat de indexeerfunctie PRI-bestanden maakt die gegarandeerd alle resourcenamen en indexen van het opgegeven schemaFile bevatten, naast eventuele nieuwe resources die aan de indexeerfunctie zijn toegevoegd. Dit zorgt ervoor dat het nieuwe PRI-bestand 'schema-compatibel' is met het oorspronkelijke schemaFile, zelfs als sommige resources zijn weggelaten.

Voor de meest voorkomende scenario's is deze functie niet nodig. Als een van de volgende opties van toepassing is, hoeft u zich geen zorgen te maken over het bouwen van PRI-bestanden die compatibel zijn met schema's:

  • U gebruikt één zelfstandig PRI-bestand (dit is de enige ondersteunde optie voor uitgepakte apps); Of
  • U bouwt uw resourcepack-PULL's altijd opnieuw op bij het opnieuw opbouwen van uw belangrijkste PRI.

Deze functie is alleen nodig in een redelijk beperkt scenario, namelijk:

  1. U hebt een pri-hoofdbestand en een of meer PRI-bestanden van het resourcepack; En
  2. U bouwt het hoofd-PRI-bestand opnieuw (maar niet de PRI-bestanden van het resourcepack); En
  3. U verwijdert (of mogelijk) een of meer resources uit het hoofd-PRI-bestand.

In dit geval zorgt het instellen van de schemaFile-verwijzing naar het oorspronkelijke PRI-hoofdbestand ervoor dat het nieuwe hoofd-PRI-bestand compatibel is met de bestaande resourcepakketten door ervoor te zorgen dat er tijdelijke indexwaarden voor de verwijderde resources zijn.

Opmerking: het nieuwe PRI-bestand bevat alle resourcenamen (en indexen) uit het oorspronkelijke bestand, maar bevat alleen waarden voor de resources die expliciet aan de indexeerfunctie zijn toegevoegd. Het nieuwe bestand neemt de waarden van het oorspronkelijke PRI-bestand niet over (kopieert).

Voorbeeld

Stel dat het PRI-bestand 'original.pri' drie resources voor het Engels bevat:

Naam Index Waarde
ms-resource:///strings/test 0 "TestValue"
ms-resource:///strings/save 1 "Opslaan"
ms-resource:///strings/delete 2 "Verwijderen"

Overweeg nu het volgende codefragment (foutcontrole weggelaten):

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

Het nieuwe resourcebestand bevat het volgende voor engels:

Naam Index Waarde
ms-resource:///strings/test 0 <geen>
ms-resource:///strings/save 1 "Opslaan"
ms-resource:///strings/delete 2 "Verwijderen"

Dit zorgt ervoor dat de resourceindexen voor save respectievelijk delete 1 en 2 hetzelfde blijven, zodat resourcepakketten met gelokaliseerde versies van 'Opslaan' en 'Verwijderen' overeenkomen. Als de toepassingscode nog steeds probeert de test resource te laden, mislukt deze tijdens runtime (ten minste in het Engels) omdat er geen kandidaten zijn gedefinieerd.

Laten we eens kijken waarom dit belangrijk is als het nieuwe PRI-bestand niet is gemaakt met het basisschema. In dat geval bevat het nieuwe PRI-bestand het volgende:

Naam Index Waarde
ms-resource:///strings/save 0 "Opslaan"
ms-resource:///strings/delete 1 "Verwijderen"

Zoekacties voor delete (index 1) halen nu de juiste tekenreeks 'Verwijderen' op in het Engels, maar in andere talen wordt de gelokaliseerde versie van 'Opslaan' opgehaald (omdat index 1 de index voor de save resource was). Dit zou ertoe leiden dat gebruikers UX zien met het label Opslaan (in hun lokale taal) dat daadwerkelijk een verwijderbewerking heeft uitgevoerd- een ernstige fout.

Requirements

Requirement Waarde
Minimaal ondersteunde client
Windows 10 versie 1803 [alleen desktop-apps]
Minimaal ondersteunde server
Windows Server [alleen desktop-apps]
Koptekst
MrmResourceIndexer.h
Bibliotheek
Mrmsupport.lib
DLL
Mrmsupport.dll

Zie ook

MrmCreateResourceIndexer

MrmCreateResourceIndexerFromPreviousPriData

MrmCreateResourceIndexerFromPreviousPriFile

MrmCreateResourceIndexerFromPreviousSchemaData

API's voor het indexeren van pakketten (PRI) en aangepaste buildsystemen