С помощью людей cppwinrt мне ранее удавалось перечислять файлы в StorageFolder;в то время мне не хватало необходимого #include.Работал нормально, пока я не перестроил приложение, используя в качестве отправной точки BlankApp, теперь предоставляемый Visual Studio 15.9.0 Preview 3 в качестве шаблона C ++ / WinRT.Теперь тот же код выдает ошибку ссылки, которую я не могу пропустить.Позвольте мне процитировать ошибочную строку: это часть класса, который я называю ResourceManager;он содержит ссылку на папку, определенную следующим образом:
IVectorView<StorageFile> m_activity_files = nullptr;
Затем у класса есть метод, объявленный как
IAsyncAction LoadActivities();
, который co_awaits вызывает вызов, чтобы получить соответствующий StorageFolder как m_activities_folder икак только это будет сделано, попытается перечислить содержимое папки:
m_activity_files = co_await m_activities_folder.GetFilesAsync(CommonFileQuery::DefaultQuery);
И вот в чем проблема.То, что раньше работало нормально, теперь приводит к следующей ошибке ссылки:
Error LNK2019 unresolved external symbol "public: struct winrt::Windows::Foundation::IAsyncOperation<struct winrt::Windows::Foundation::Collections::IVectorView<struct winrt::Windows::Storage::StorageFile> > __thiscall winrt::impl::consume_Windows_Storage_Search_IStorageFolderQueryOperations<struct winrt::Windows::Storage::StorageFolder>::GetFilesAsync(enum winrt::Windows::Storage::Search::CommonFileQuery const &)const " (?GetFilesAsync@?$consume_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) referenced in function "public: struct winrt::Windows::Foundation::IAsyncAction __thiscall AppEngine::ResourceManager::LoadActivities$_ResumeCoro$2(void)" (?LoadActivities$_ResumeCoro$2@ResourceManager@AppEngine@@QAE?AUIAsyncAction@Foundation@Windows@winrt@@XZ)
(сопровождаемый путем к объектному файлу). Включения и пространства имен такие же, как и раньше, и, кажется, не имеет значения,Я не использую полностью уточненные имена в аргументах.
#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::Foundation::Collections;
using namespace Windows::Storage;
using namespace Windows::Storage::Provider;
using namespace Windows::Storage::Search;
using namespace Windows::Storage::Streams;
Но я не могу понять, в чем проблема.Похоже, что что-то изменилось в последних версиях C ++ / WinRT и SDK 10.0.17666.0.Что я действительно хотел бы увидеть, так это (для каждого метода, на самом деле) несколько строк примера кода, демонстрирующих использование C ++ / WinRT, но пока достаточно просто решить эту проблему!
[ОБНОВЛЕНИЕ]Важно, что ошибка ссылки относится к IAsyncOperation, когда этот вызов выполняется в методе с типом возвращаемого значения IAsyncAction?
[Обновление 2] Использование примера приложения PhotoEditor в качестве модели. Я подумал, что, возможно, будет лучше создатьFileQuery и запустите GetFilesAsync на этом.Итак:
QueryOptions options{};
options.FolderDepth(FolderDepth::Shallow);
options.FileTypeFilter().Append(L".act");
auto result = m_activities_folder.CreateFileQueryWithOptions(options);
auto activityFiles = co_await result.GetFilesAsync();
Конечно, Windows.Storage.Search уже включен в #, а его пространство имен объявлено, как указано выше.Но теперь я получаю дополнительную ошибку ссылки на QueryOptions:
Error LNK2019 unresolved external symbol "public: __thiscall winrt::Windows::Storage::Search::QueryOptions::QueryOptions(void)" (??0QueryOptions@Search@Storage@Windows@winrt@@QAE@XZ) referenced in function "public: struct winrt::Windows::Foundation::IAsyncAction __thiscall AppEngine::ResourceManager::LoadActivities$_ResumeCoro$2(void)" (?LoadActivities$_ResumeCoro$2@ResourceManager@AppEngine@@QAE?AUIAsyncAction@Foundation@Windows@winrt@@XZ)
Может ли быть какая-то базовая проблема с настройками проекта BlankApp?