FileOpenPicker возвращает ошибку памяти в WinUI3 с использованием C++

Со ссылкой на мой предыдущий вопрос — Как получить дескриптор главного окна на странице в WinUI 3 с помощью C++

Я изучаю WinUI3 с помощью С++ и изо всех сил пытаюсь найти информацию и материалы на другом портале сообщества.

Я разработал демонстрационное приложение с окном и двумя страницами. На одной из страниц я хочу открыть средство выбора файлов.

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();     
}

Ошибка

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

Исключение по адресу 0x00007FF9A92706BC в App1.exe: исключение Microsoft C++: winrt::hresult_error в ячейке памяти 0x0000007EA60F9B88.

Внутри исключения будет HRESULT. Что такое ХРЕЗУЛЬТАТ?

Raymond Chen 14.02.2023 06:18

Вероятно, это аварийное отключение, вызванное синхронным ожиданием в потоке пользовательского интерфейса (вызов .get()).

IInspectable 14.02.2023 06:27

@IInspectable Я также использовал winrt::fire_and_forget и co_wait, но с тем же исключением.

Gaurang Dave 14.02.2023 07:02

Не могли бы вы сообщить нам, каково значение HRESULT ошибки? Вы увидели ошибку в выводе или получили ошибку в своем коде?

Jeaninez - MSFT 14.02.2023 08:48

@Jeaninez-MSFT Я думаю, что что-то не так со значениями файлового фильтра. Вот что я получил в окнах вывода: «Свойство FileType Filter должно иметь хотя бы один указанный фильтр типа файла». Но я все еще сомневаюсь, что это связано либо с потоком пользовательского интерфейса, либо с обработчиком окна.

Gaurang Dave 14.02.2023 09:00

@RaymondChen Пожалуйста, проверьте это - Исключение возникло по адресу 0x00007FF9A92706BC (KernelBase.dll) в App1.exe: исходная ошибка WinRT - 0x80004005: «В свойстве FileTypeFilters должен быть указан хотя бы один фильтр типа файла». onecoreuap\shell\twinui\pickercore\api\lib\winrtpicker.cpp(9‌​43)\twinui.appcore.d‌​ll!00007FF9813081F6: (вызывающий: 00007FF9AB5D5583) ReturnHr(1) tid(37d0) 80004005 Неопределенная ошибка CallContext:[ \PickSingleFileAsync] Исключение по адресу 0x00007FF9A92706BC в App1.exe: исключение Microsoft C++: winrt::hresult_error в ячейке памяти 0x0000004B58129808.

Gaurang Dave 14.02.2023 09:24

@Jeaninez-MSFT Пожалуйста, проверьте это — Исключение по адресу 0x00007FF9A92706BC (KernelBase.dll) в App1.exe: исходная ошибка WinRT — 0x80004005: «В свойстве FileTypeFilters должен быть указан хотя бы один фильтр типа файла». onecoreuap\shell\twinui\pickercore\api\lib\winrtpicker.cpp(9‌​43)\twinui.appcore.d‌​ll!00007FF9813081F6: (вызывающий: 00007FF9AB5D5583) ReturnHr(1) tid(37d0) 80004005 Неопределенная ошибка CallContext:[ \PickSingleFileAsync] Исключение по адресу 0x00007FF9A92706BC в App1.exe: исключение Microsoft C++: winrt::hresult_error в ячейке памяти 0x0000004B58129808.

Gaurang Dave 14.02.2023 09:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У тебя две проблемы

так что это должно работать:

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();
}

Спасибо Саймон. Я также решил это. Вы опубликовали ответ, пока я редактировал свой ответ: D Большое спасибо. Я сделал ошибку, не заглянув в детали окна вывода.

Gaurang Dave 14.02.2023 09:46

Пушка сопрограммы: сопрограмма должна делать одну из двух вещей: 1 принимать аргументы по значению или 2 оставлять const&, но удалять имена, чтобы аргументы не использовались. С сопрограммами ссылки становятся недействительными в первой точке приостановки.

IInspectable 14.02.2023 09:52

Другие вопросы по теме