FileOpenPicker returns memory error in WinUI 3

322 Views Asked by At

With reference to my previous question

I am exploring WinUI3 using C++ and struggling to find information and material on different community portals.

I developed a demo app which has a window and 2 pages. On one of the pages, I want to open a file picker.

Tab1Page.xaml.cpp

void winrt::App1::implementation::Tab1Page::Button_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e)
{
    OutputTextBlock().Text(OutputTextBlock().Text() + L"Button Clicked\n");

    auto hwnd = GetProcessFirstWindowHandle();

    auto picker = winrt::Windows::Storage::Pickers::FileOpenPicker();
    //Initialize the folder picker with the window handle(HWND).
    auto initializeWithWindow { picker.as<::IInitializeWithWindow>()
    };
    initializeWithWindow->Initialize(hwnd);
    picker.SuggestedStartLocation(winrt::Windows::Storage::Pickers::PickerLocationId::Desktop);
    winrt::Windows::Storage::StorageFile file = picker.PickSingleFileAsync().get();
}

Error

winrt::Windows::Storage::StorageFile file = picker.PickSingleFileAsync().get();`

Exception thrown at 0x00007FF9A92706BC in App1.exe: Microsoft C++ exception: winrt::hresult_error at memory location 0x0000007EA60F9B88.
1

There are 1 best solutions below

2
Simon Mourier On BEST ANSWER

You have two problems

so this should work:

Windows::Foundation::IAsyncAction winrt::App1::implementation::Tab1Page::Button_Click(IInspectable const& sender, RoutedEventArgs const& args)
{
  auto hwnd = GetFirstProcessWindowHandle();

  auto picker = winrt::Windows::Storage::Pickers::FileOpenPicker();
  picker.FileTypeFilter().Append(L"*");

  auto initializeWithWindow{ picker.as<IInitializeWithWindow>() };
  initializeWithWindow->Initialize(hwnd);
  picker.SuggestedStartLocation(winrt::Windows::Storage::Pickers::PickerLocationId::Desktop);
  auto file = co_await picker.PickSingleFileAsync();
}