Rémi Bernon (@rbernon) commented about dlls/cryptowinrt/async.c:
return ref;
}
-static HRESULT WINAPI async_impl_put_Completed( IWineAsyncInfoImpl *iface, IWineAsyncOperationCompletedHandler *handler ) +static HRESULT WINAPI async_completed_Invoke( IAsyncActionCompletedHandler *iface, IAsyncAction *info,
AsyncStatus status )
{
- struct async_info *impl = impl_from_IWineAsyncInfoImpl( iface );
- HRESULT hr = S_OK;
- struct async_completed *impl = impl_from_IAsyncActionCompletedHandler( iface );
- IAsyncActionCompletedHandler *handler = (IAsyncActionCompletedHandler *)impl->inner_handler;
- IAsyncAction *action = (IAsyncAction *)impl->inner_action;
- TRACE( "iface %p, handler %p.\n", iface, handler );
- return IAsyncActionCompletedHandler_Invoke( handler, action, status );
This may work but it is IMO incorrect and I don't think we should do that. `IAsyncOperationCompletedHandler<T>` is not derived from `IAsyncActionCompletedHandler`, and `IAsyncOperation<T>` is not derived from `IAsyncAction`.