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, optional]

型: PCWSTR

既定のリソース修飾子の一覧。 たとえば、"language-en-US_scale-100" などです。 修飾子の詳細については、 MRM の修飾子を参照してください。

schemaFile [in]

型: PCWSTR

スキーマが一致する必要がある既存の PRI ファイルへのパス、または一致する PRI ファイルのスキーマを含む XML ダンプへのパス。 XML ダンプの作成については、 MrmDumpPriFile を参照してください。

インデクサー [in, out]

型: MrmResourceIndexerHandle*

リソース インデクサー ハンドルへのポインター。 正常に戻ると、リソース インデクサーへのハンドルが含まれます。 使用後、 MrmDestroyIndexerAndMessages を使用してインデクサーを解放する必要があります。

値を返す

型: HRESULT

関数が成功した場合はS_OKし、それ以外の場合は他の値を指定します。 成功または失敗を判断するには、 SUCCEEDED マクロまたは FAILED マクロ (winerror.h で定義) を使用します。

注釈

この関数は MrmCreateResourceIndexer と同じですが、インデクサーでは、インデクサーに追加された新しいリソースに加えて、指定された schemaFile のすべてのリソース名とインデックスを含める PRI ファイルが作成されます。 これにより、一部のリソースが省略されている場合でも、新しい PRI ファイルは元の schemaFile と "スキーマ互換" になります。

ほとんどの一般的なシナリオでは、この関数は必要ありません。 次のいずれかが該当する場合は、スキーマと互換性のある PRI ファイルのビルドについて心配する必要はありません。

  • 1 つのスタンドアロン PRI ファイルを使用します (パッケージ化されていないアプリでサポートされている唯一のオプションです)。 または
  • メイン PRI をリビルドするときは、常にリソース パックの PRI を再構築します。

この関数は、非常に限られたシナリオでのみ必要です。つまり、次のようになります。

  1. メイン PRI ファイルと 1 つ以上のリソース パック PRI ファイルがあります。 そして
  2. メイン PRI ファイルを再構築しています (ただし、リソース パック PRI ファイルは再構築しません)。 そして
  3. メイン PRI ファイルから 1 つ以上のリソースを削除している (または削除されている可能性があります)。

このような状況では、 schemaFile 参照を元のメイン PRI ファイルに設定すると、削除されたリソースのプレースホルダー インデックス値があることを確認することで、新しいメイン PRI ファイルと既存のリソース パックとの互換性が確保されます。

注: 新しい PRI ファイルには、元のファイルのすべてのリソース名 (およびインデックス) が含まれますが、インデクサーに明示的に追加されたリソースの値のみが含まれます。 新しいファイル は、 元の PRI ファイルから値を継承 (コピー) しません。

PRI ファイル "original.pri" に英語用の 3 つのリソースが含まれているとします。

名前 Index 価値
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:\\");

新しいリソース ファイルには、英語用の次のものが含まれます。

名前 Index 価値
ms-resource:///strings/test 0 <なし>
ms-resource:///strings/save 1 "保存"
ms-resource:///strings/delete 2 "削除"

これにより、 savedelete のリソース インデックスが同じ (それぞれ 1 と 2) 維持されるため、ローカライズされたバージョンの "保存" と "削除" を含むリソース パックが一致します。 アプリケーション コードが test リソースを読み込もうとした場合、候補が定義されていないため、実行時 (少なくとも英語) で失敗します。

これが重要な理由を示すために、基本スキーマで新しい PRI ファイルが作成されていない場合の動作を見てみましょう。 その場合、新しい PRI ファイルには次のものが含まれます。

名前 Index 価値
ms-resource:///strings/save 0 "保存"
ms-resource:///strings/delete 1 "削除"

delete (インデックス 1) の検索を再取得すると、正しい文字列 "Delete" が英語で取得されますが、他の言語ではローカライズされたバージョンの "Save" が取得されます (インデックス 1 は以前は save リソースのインデックスでした)。 これにより、ユーザーは実際に削除操作を実行した "保存" というラベルが付いた UX が (ローカル言語で) 表示されます。これは重大なバグです。

必要条件

Requirement 価値
サポートされる最小クライアント
Windows 10バージョン 1803 [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows Server [デスクトップ アプリのみ]
ヘッダー
MrmResourceIndexer.h
図書館
Mrmsupport.lib
DLL
Mrmsupport.dll

こちらも参照ください

MrmCreateResourceIndexer

MrmCreateResourceIndexerFromPreviousPriData

MrmCreateResourceIndexerFromPreviousPriFile

MrmCreateResourceIndexerFromPreviousSchemaData

パッケージ リソース インデックス作成 (PRI) API とカスタム ビルド システム