私は、初めてのC++/WRLを使用して Windows 10 ストア/WinRT コードを書いています。そして、長い保留中の非同期操作をキャンセルする方法を知りたいですか?
それを説明する最良の方法は、次の例です。
#include <Windows.Services.Store.h>
#include <wrl.h>
auto onAppLicCompletedCallback = Callback<Implements<RuntimeClassFlags<ClassicCom>, IAsyncOperationCompletedHandler<StoreAppLicense*>, FtmBase>>(
[](IAsyncOperation<StoreAppLicense*>* operation, AsyncStatus status)
{
//Asynchronous operation is done
return S_OK;
});
//'opAppLic' is defined as:
// ComPtr<IAsyncOperation<StoreAppLicense*>> opAppLic;
// ...
//Begin asynchronous operation
HRESULT hr = opAppLic->put_Completed(onAppLicCompletedCallback.Get());
if (SUCCEEDED(hr))
{
//Keep going ...
//Say, at some point here I need to cancel 'onAppLicCompletedCallback'
//but how do I do it?
}
編集:opAppLic->Cancel()
以下の回答で提案されているように追加しようとすると、次のコンパイラエラーが発生しました:
1>file-name.cpp(597): error C2039: 'Cancel' : is not a member of 'Microsoft::WRL::Details::RemoveIUnknownBase<T>'
1> with
1> [
1> T=ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::Services::Store::StoreAppLicense*>
1> ]
代わりにそれが必要ですか、それとも何QueryInterface
ですか?IAsyncInfo
EDIT2:opAppLic
これは、変数のタイプについて取得しているものです:
いいえ、メソッドはありませんCancel
: