Пытаясь перевести на cppwinrt метод StorageFolder GetFilesAsync, я не могу исправить ошибки ссылки компилятора. Вот очень простая процедура проверки концепции:
#include "winrt/Windows.Storage.h"
#include "winrt/Windows.Foundation.Collections.h"
IAsyncAction TestClass::LoadFiles()
{
StorageFolder appFolder = Windows::ApplicationModel::Package::Current().InstalledLocation();
StorageFolder assetsFolder = co_await appFolder.GetFolderAsync(hstring(L"Assets"));
auto files = co_await assetsFolder.GetFilesAsync(CommonFileQuery::DefaultQuery);
}
Проблема, похоже, кроется в возвращаемом типе GetFilesAsync. Я пробовал для этого разные типы, например IVectorView, но вроде ничего не работает. Кто-нибудь знает пример кода, показывающий, как это перечисление может быть выполнено в C ++ / winrt?
[ОБНОВЛЕНИЕ] Возвращаясь к этому проекту с SDK 10.0.17666 и VS 15.9.0 Preview 3, я обнаружил, что решение, принятое ранее из этих ответов, больше не работает. На этот раз я обязательно включу полную ошибку, чтобы посмотреть, есть ли у кого-нибудь идеи. Для простоты я буду использовать только простой код, предоставленный IInspectable, измененный только для того, чтобы сделать его членом класса в моем классе ResourceManager:
#include "winrt/Windows.ApplicationModel.h"
#include "winrt/Windows.Storage.h"
#include "winrt/Windows.Storage.Streams.h"
#include "winrt/Windows.Foundation.Collections.h"
#include "winrt/Windows.Storage.Search.h"
#include "winrt/Windows.UI.Core.h"
#include "pch.h"
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Storage;
using namespace Windows::Storage::Search;
IAsyncAction ResourceManager::LoadActivities()
{
StorageFolder appFolder = Windows::ApplicationModel::Package::Current().InstalledLocation();
StorageFolder assetsFolder = co_await appFolder.GetFolderAsync(L"Activities");
auto files = co_await assetsFolder.GetFilesAsync(CommonFileQuery::DefaultQuery);
}
Вызов GetFilesAsync теперь вызывает следующую ошибку ссылки: Код серьезности Описание Ошибка состояния подавления строки файла проекта LNK2019 неразрешенный внешний символ "public: struct winrt :: Windows :: Foundation :: IAsyncOperation> __thiscall winrt :: impl :: consumer_Windows_Storage_Search_IStorageFolderQueryOperations :: GetFiles (перечисление winrt :: Windows :: Storage :: Search :: CommonFileQuery const &) const "(? GetFilesAsync @? $ consumer_Windows_Storage_Search_IStorageFolderQueryOperations @ UStorageFolder @ Storage @ Windows @ winrt @@@ impl @ winrt @@ QBE? AU? @ $ IAsyncOperation U? $ IVectorView @ UStorageFile @ Storage @ Windows @ winrt @@@ Collections @ Foundation @ Windows @ winrt @@@ Foundation @ Windows @ 3 @ ABW4CommonFileQuery @ Search @ Storage @ 63 @@ Z), указанного в функции "public: struct winrt :: Windows :: Foundation :: IAsyncAction __thiscall AppEngine :: ResourceManager :: LoadActivities $ _ResumeCoro $ 2 (void) "(? LoadActivities $ _ResumeCoro $ 2 @ ResourceManager @ AppEngine @@ QAE? AUIAsyncAction @ Foundation XZ @ winrt
(далее следует путь к объектному файлу)
Должен признаться, мне трудно расшифровать это сообщение об ошибке. Может быть, у кого-нибудь из присутствующих появится идея? Должно быть что-то, что изменилось в последних обновлениях системы.