Funzione MrmCreateResourceIndexerFromPreviousSchemaFile

Crea un indicizzatore di risorse in grado di creare file PRI compatibili con i file PRI esistenti. Questa funzione è necessaria solo in scenari abbastanza limitati; vedi Osservazioni per altre info.

È necessario inizializzare COM (ad esempio chiamando CoInitializeEx) prima di usare questa funzione.

Sintassi

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

Parametri

projectRoot [in]

Tipo: PCWSTR

Directory radice da cui verranno calcolati alcuni percorsi di file. In genere si tratta della directory radice del progetto di origine, ma può essere diversa. Per altre informazioni, vedere Risorse file in MRM .

platformVersion [in]

Tipo: MrmPlatformVersion

Versione della piattaforma (targetOsVersion) da usare per il file di configurazione generato. La maggior parte dei chiamanti deve usare solo MrmPlatformVersion_Windows10_0_0_5

defaultQualifiers [in, facoltativo]

Tipo: PCWSTR

Elenco dei qualificatori di risorse predefiniti. Ad esempio, "language-en-US_scale-100". Per altre informazioni sui qualificatori, vedere Qualificatori in MRM.

schemaFile [in]

Tipo: PCWSTR

Percorso di un file PRI esistente il cui schema deve corrispondere o il percorso di un dump XML contenente lo schema del file PRI da trovare. Per informazioni sulla creazione di un dump XML, vedere MrmDumpPriFile .

indicizzatore [in, out]

Tipo: MrmResourceIndexerHandle*

Puntatore a un handle dell'indicizzatore di risorse. In caso di esito positivo, questo conterrà un handle per un indicizzatore di risorse. È necessario liberare l'indicizzatore tramite MrmDestroyIndexerAndMessages dopo averlo usato.

Valore restituito

Tipo: HRESULT

S_OK se la funzione ha avuto esito positivo; in caso contrario, un altro valore. Utilizzare le macro SUCCEEDED o FAILED (definite in winerror.h) per determinare l'esito positivo o negativo.

Osservazioni:

Questa funzione equivale a MrmCreateResourceIndexer , ad eccezione del fatto che l'indicizzatore creerà i file PRI che includono tutti i nomi delle risorse e gli indici dello schemaFile fornito oltre alle nuove risorse aggiunte all'indicizzatore. Ciò garantisce che il nuovo file PRI sia "compatibile con lo schema" con lo schemaFile originale, anche se alcune risorse sono state omesse.

Per gli scenari più comuni, questa funzione non è necessaria. Se si applica una delle opzioni seguenti, non è necessario preoccuparsi della creazione di file PRI compatibili con lo schema:

  • Si usa un singolo file PRI autonomo (che è l'unica opzione supportata per le app non in pacchetto); O
  • Si ricompilano sempre le richieste pull del pacchetto di risorse durante la ricompilazione del pri principale.

Questa funzione è necessaria solo in uno scenario abbastanza limitato, ovvero:

  1. Si dispone di un file PRI principale e uno o più file PRI del pacchetto di risorse; E
  2. Si sta ricompilando il file PRI principale (ma non i file PRI del pacchetto di risorse); E
  3. Si stanno rimuovendo una o più risorse dal file PRI principale.

In questo caso, l'impostazione del riferimento schemaFile al file PRI principale originale garantirà che il nuovo file PRI principale sia compatibile con i pacchetti di risorse esistenti, assicurandosi che siano presenti valori di indice segnaposto per le risorse rimosse.

Nota: il nuovo file PRI conterrà tutti i nomi delle risorse (e gli indici) del file originale, ma conterrà solo valori per le risorse aggiunte in modo esplicito all'indicizzatore. Il nuovo file non eredita (copia) i valori dal file PRI originale.

Esempio

Si supponga che il file PRI "original.pri" contenga tre risorse per l'inglese:

Nome Indice Valore
ms-resource:///strings/test 0 "TestValue"
ms-resource:///strings/save 1 "Salva"
ms-resource:///strings/delete 2 "Elimina"

Si consideri ora il frammento di codice seguente (controllo degli errori omesso):

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

Il nuovo file di risorse conterrà quanto segue per l'inglese:

Nome Indice Valore
ms-resource:///strings/test 0 <Nessuno>
ms-resource:///strings/save 1 "Salva"
ms-resource:///strings/delete 2 "Elimina"

In questo modo, gli indici delle risorse per save e delete rimangono invariati (rispettivamente 1 e 2), in modo che i pacchetti di risorse con versioni localizzate di "Salva" e "Elimina" corrispondano. Si noti che se il codice dell'applicazione ha ancora provato a caricare la test risorsa, l'operazione avrà esito negativo in fase di esecuzione (almeno in inglese) perché non sono stati definiti candidati.

Per illustrare perché questo è importante, vediamo cosa accade se il nuovo file PRI non è stato creato con lo schema di base. In tal caso, il nuovo file PRI conterrà quanto segue:

Nome Indice Valore
ms-resource:///strings/save 0 "Salva"
ms-resource:///strings/delete 1 "Elimina"

Le ricerche di risorse per delete (indice 1) recupererebbero ora la stringa corretta "Delete" in inglese, ma in altre lingue recupererebbe la versione localizzata di "Save" (poiché l'indice 1 era l'indice per la save risorsa). In questo modo, gli utenti visualizzano l'esperienza utente con etichetta "Salva" (nella lingua locale) che effettivamente ha eseguito un'operazione di eliminazione, un bug grave.

Requisiti

Requisito Valore
Client minimo supportato
Windows 10 versione 1803 [solo app desktop]
Server minimo supportato
Windows Server [solo app desktop]
Intestazione
MrmResourceIndexer.h
Libreria
Mrmsupport.lib
DLL
Mrmsupport.dll

Vedere anche

MrmCreateResourceIndexer

MrmCreateResourceIndexerFromPreviousPriData

MrmCreateResourceIndexerFromPreviousPriFile

MrmCreateResourceIndexerFromPreviousSchemaData

API di indicizzazione delle risorse del pacchetto (PRI) e sistemi di compilazione personalizzati