[Примечание: для краткости я опустил большинство квалификаций пространства имен в коде и сообщениях об ошибках.]
На панели списка ошибок Visual Studio отображается только первая строка каждой ошибки (это очень полезная функция,особенно при программировании на C ++, потому что некоторые сообщения об ошибках от компилятора чрезвычайно длинные. Вам нужно взглянуть на окно вывода, чтобы увидеть остальную часть сообщения об ошибке:
error C2664: 'IAsyncOperation<TResult>::Completed::set' :
cannot convert parameter 1
from 'AsyncOperationCompletedHandler<TResult> ^'
to 'AsyncOperationCompletedHandler<TResult> ^'
with
[
TResult=IVectorView<StorageFile ^> ^
]
and
[
TResult=IVectorView<IStorageFile ^> ^
]
and
[
TResult=IVectorView<StorageFile ^> ^
]
No user-defined-conversion operator available, or
Types pointed to are unrelated;
conversion requires reinterpret_cast, C-style cast or function-style cast
Это все еще немного сбивает с толку, потому чтовсе три шаблона используют параметр с именем TResult
. Чтобы расшифровать ошибку, обратите внимание, что порядок шаблонов в первой строке соответствует порядку списков аргументов шаблона в оставшейся части строки.
Проблемаздесь вы смешиваете использование StorageFile
и IStorageFile
. В обеих этих строках вам нужно использовать StorageFile
(см. строки с морковью, где указано IStorageFile
):
getResourceFiles->Completed = ref new Windows::Foundation::AsyncOperationCompletedHandler< IVectorView< Windows::Storage::IStorageFile^ >^ >(
^
[this]( Windows::Foundation::IAsyncOperation< IVectorView< Windows::Storage::IStorageFile^ >^ >^ operation ) {
^
Обратите внимание, что как только вы исправите эту проблему, вы получите еще одну пару ошибок, потому что ваши лямбды должны иметь два параметра, второй - AsyncStatus
.В конце они оба должны быть объявлены как:
// Namespaces omitted for brevity
[this](IAsyncOperation<StorageFolder^>^ operation, AsyncStatus status) { }
Поскольку я работаю для WinRT, я не могу использовать очень полезные функции FindFirstFile
и FindNextFile
.
Обратите внимание, что вы можете использовать как FindFirstFileEx
, так и FindNextFile
в приложении в стиле Metro.(Не Ex
FindFirstFile
не может использоваться).
Вы должны использовать асинхронные функции WinRT везде, где это возможно и везде, где это возможно, но это не значит, что по-прежнему не используетсядля этих других функций.