Я создаю класс времени выполнения внутри шаблона проекта BlankApp, который открывает IVectorView<StorageFile>
, который он получает по ссылке в качестве параметра. Затем он зацикливается на векторе для чтения из файлов. Однако, когда я пытаюсь использовать вектор после вызова read, он выдает нарушение прав чтения.
Причина, по которой я считаю это ошибкой, заключается в том, что это происходит только тогда, когда я компилирую с использованием конфигурации x64 проекта BlankApp. В x86 исключение не выдается.
Это довольно легко воспроизвести, поэтому было бы неплохо, если бы кто-то еще мог подтвердить, если это произойдет с ними.
//test_class.idl
[bindable]
[default_interface]
runtimeclass test_class
{
test_class();
Windows.Foundation.IAsyncAction read_files(Windows.Foundation.Collections.IVectorView<Windows.Storage.StorageFile> files);
}
//test_class.cpp
Windows::Foundation::IAsyncAction test_class::read_files(Windows::Foundation::Collections::IVectorView<Windows::Storage::StorageFile> const& files)
{
for (auto& file : files)
{
auto res = files;
auto stream = co_await file.OpenReadAsync();
auto res2 = files; // read access violation. this->**m_ptr** was 0xFFFFFFFFFFFFFFFF.
}
co_return;
}
//MainPage.cpp
Windows::Foundation::IAsyncAction MainPage::onclick_button(Windows::Foundation::IInspectable const & sender, Windows::UI::Xaml::RoutedEventArgs const & args)
{
BlankApp1::test_class m_test_class = winrt::make<BlankApp1::implementation::test_class>();
Windows::Storage::Pickers::FileOpenPicker picker;
picker.FileTypeFilter().Append(L".bmp");
Windows::Foundation::Collections::IVectorView<Windows::Storage::StorageFile> files = co_await picker.PickMultipleFilesAsync();
co_await m_test_class.read_files(files);
}