2016-11-16 11 views
0

実行時に、ファイルに格納されているResourceDictionaryをロードしようとしています。私はそれを取得したようUWP/C++でResourceDictionaryをコードバックにロード

auto rd = ref new ResourceDictionary(); 
rd->Source = ref new Uri("ms-appx:///!UWP/Styles/UWPDictionary.xaml"); 
Application::Current->Resources->MergedDictionaries->Append(rd); 

は、このコードはApp.xamlに右後InitializeComponent()を実行する必要があります:C#ではそれは単に

ResourceDictionary resourceDictionary = new ResourceDictionary(); 
resourceDictionary.Source = new Uri("ms-appx:///!UWP/Styles/UWPDictionary.xaml", UriKind.Relative); 
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary); 

が、同じコードとして(C++/CXに)動作していないに見えます.cppのコンストラクタ。ソースが正しく設定されている(URIを作成してもエラーは発生しません)。 0x40080201:wp_UWP.exeに0x7464A6F2(KernelBase.dll)で投げ

例外:エラー(:0x8000ffffが返され、0x00000016、0x0D30F274パラメータ)を発信WinRTの

最終ラインMergedDictionaries->Append(rd)は、例外がスローされます。 wp_UWP.exeの0x7464A6F2でスローされた例外:Microsoft C++例外:プラットフォーム:: COMException ^がメモリ位置0x0D30F714にあります。 HRESULT:0x8000ffffが返さ致命的な障害 WinRTの情報:致命的なエラーwp_UWP.exeで0x0C9E571A(Windows.UI.Xaml.dll)で

未処理の例外:0xC000027B:アプリケーション内部例外が発生した(パラメータ:0x00F1CA10、0x00000002)。

このコードを修正するにはどうすればよいですか?私はなぜそれが "致命的な失敗"例外をスローするのか分からない。

答えて

0

あなたはメインページまたはメインページのコンストラクタで初期化するたびにコードを置くことができますし、それが正常に動作します:それはアプリのコンストラクタを除いてどこでも実際に動作するように

void App::OnLaunched 
(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e) 
{ 
    auto rootFrame = dynamic_cast<Frame^>(Window::Current->Content); 

    // Do not repeat app initialization when the Window already has content, 
    // just ensure that the window is active 
    if (rootFrame == nullptr) 
    { 
     // Load the dictionary if not already loaded 
     if (!resourcesLoaded) { 
      auto rd = ref new ResourceDictionary(); 
      rd->Source = ref new Uri("ms-appx:///Dictionary.xaml"); 
      Application::Current->Resources->MergedDictionaries->Append(rd); 
      resourcesLoaded = true; 
     } 
     .. 
     .. 
    } 
    .. 
    .. 
} 

が見えると私は考え理由を持っていませんそうです。

+0

OnLaunched()といくつかの問題を抱えているApp.xamlの問題を解決したことが判明しました。ありがとうございました :) –

関連する問題