Silverlight C++ プロジェクトにおける XRPack バージョン互換性とリソースコンパイルの問題対応

Silverlight for Windows Embedded (C++ ベース) 開発において、リソース読み込み時に 0xC00CEE2B (WC_E_XMLCHARACTER) エラーが発生する事象が報告されています。この問題の根本原因の一つとして、XRPack 工具のバージョン違いによる出力フォーマットの非互換が挙げられます。 具体的には、XRPack Tool のバージョンによって生成される中間ファイルの形式に差異があります:
  • バージョン 7.00.437.baml ファイルのみを出力
  • バージョン 7.00.2825.baml および .compressed ファイルの両方を出力
バージョン 7.00.437 で生成された .baml ファイルを用いると、以下の初期化処理でロード失敗が発生します:
HRESULT App::InitializeComponent()  
{  
    RXamlSource appXaml(GetHInstance(), IDR_FRONT_LINK_UI_APP);  
    HRESULT hr = m_pApplication->LoadResourceDictionary(&appXaml, NULL);  
    if (WC_E_XMLCHARACTER == hr) {  
        printf("0x%x: illegal XML character\n", hr);  
    }  
    return hr;  
}
この問題を解消するには、XRPack ツールをバージョン 7.00.2825 に更新し、.compressed ファイルも正しく生成されるようにする必要があります。 --- 一方、クリーンビルド時 (例: Output\*.compressed 配下のファイルを完全削除) に以下の RC (Resource Compiler) エラーが発生することがあります:
.\Front_Link_UIGenerated.rc2(8) : error RC2135 : file not found: ..\..\OutPut\exe\Front_Link_UI\App.Compressed  
.\Front_Link_UIGenerated.rc2(9) : error RC2135 : file not found: ..\..\OutPut\exe\Front_Link_UI\MainPage.Compressed  
.\Front_Link_UIGenerated.rc2(10) : error RC2135 : file not found: ..\..\OutPut\exe\Front_Link_UI\Page_Link_001.Compressed
この現象の原因は、.baml のみが生成され、.compressed ファイルが生成されない状態でリソーススクリプト (.rc2) が参照しようとするためです。 回避策: 1. プロジェクトに含まれる以下のファイルを明示的に削除します: - Front_Link_UIGenerated.h - Front_Link_UIGenerated.rc2 2. 再度ビルドを実行すると、以下のようなコンパイルログが出力され、両フォーマット (.baml + .compressed) が正しく生成されるようになります:
1>Xaml: e:\Work\T9\MainProcess\T9_Debug\CODE\CODE_UI\BlendProject\Front_Link\Front_Link_UI\App.xaml  
1>Baml: e:\Work\T9\MainProcess\T9_Debug\CODE\CODE_UI\OutPut\exe\Front_Link_UI\App.baml  
1>Compile Xaml SUCCEEDED (5.2%)  
1>Xaml: e:\Work\T9\MainProcess\T9_Debug\CODE\CODE_UI\BlendProject\Front_Link\Front_Link_UI\MainPage.xaml  
1>Baml: e:\Work\T9\MainProcess\T9_Debug\CODE\CODE_UI\OutPut\exe\Front_Link_UI\MainPage.baml  
1>Compile Xaml SUCCEEDED (26.4%)  
1>Xaml: e:\Work\T9\MainProcess\T9_Debug\CODE\CODE_UI\BlendProject\Front_Link\Front_Link_UI\Page_Link_001.xaml  
1>Baml: e:\Work\T9\MainProcess\T9_Debug\CODE\CODE_UI\OutPut\exe\Front_Link_UI\Page_Link_001.baml  
1>Compile Xaml SUCCEEDED (-36.0%)
Note: 数値のパーセンテージ (例: 5.2%, -36.0%) はビルド進捗 rate を示す出力であり、負値は圧縮効率のNegative ratio 表記の可能性があり、実際のエラーではありません。 --- XAML ページの更新手順: Blend for Windows Embedded で UI を変更した場合は、Visual Studio 2008 環境に再同期する必要があります。 手順は以下の通り:
  1. ソリューションエクスプローラで対象プロジェクトを選択
  2. メニューから ツール > Windows Embedded Silverlight Tools > Update Silverlight for Windows Embedded Project... を実行
これにより、Blend で変更された XAML 情報がプロジェクト内リソースと FileUtils 関連ファイルに再生成され、出力整合性が保たれます。

タグ: Silverlight embedded Windows-Embedded-Silverlight XRPack BAML

6月24日 17:32 投稿