从传统COM简析WinRT的Async(使用WRL)

本文深入探讨了WinRT的异步编程模型,通过WRL库详细阐述了如何实现Async操作,旨在帮助开发者摆脱传统COM的复杂模板代码。
摘要由CSDN通过智能技术生成
WinRT出来有3年了,用的人并不多,用C++来用它的人更是少。
照成这样不外乎Windows 8平台不给力,用户基数少,但是WinRT本身的难用也是一个方面的原因,首先WinRT的所谓大宇50ms的任务全部Async化,这对习惯了传统Win32桌面的程序员来说 —— 你在逗我玩呢。
现在我们来简单看看WinRT的Async模型。

实在没太多必要介绍那些理论知识,就像这种文章:
http://blogs.msdn.com/b/windowsappdev_cn/archive/2012/03/26/windows.aspx
或者这种文章:
http://blogs.msdn.com/b/windowsappdev_cn/archive/2012/04/30/winrt-await.aspx(深入探究 WinRT 和 await)
这些文章充满了浆糊和痛苦,就像MSDN写的函数声明介绍一样。

我希望屏幕前的你对微软的传统COM技术(进程内COM)有了解,知道ATL帷幔之下的COM原始情况,也就是我希望你曾经徒手从IUnknown开始,到QueryInteface,到AddRef、Release写过,然后使用DllGetClassObject来new这个实例,也就是你曾经有过不错的COM开发经验,对COM有较好的认识。
如果你不曾了解这些,这文章还是关了把,上面那2个的连接也许有一个适合你。
嗯,这篇文章是为我们传统的Win32桌面C++程序员准备的!

异步,对我们传统的Win32程序员来说。
不外乎:
SubmitTask
DoWork(new Thread)...
CallbackNotify
EndTask

也就是,我们跑的Task,必需要能同步\异步通知到它的所有者,并且把处理结果交过来。
那WinRT的异步,也不外乎这样。

来我们看代码,下面的代码,请建立控制台工程:
#include <stdio.h>
#include <string.h>
#include <memory.h>
#include <string>
#include <iostream>
#include <memory>

#include <Windows.h>

#include <wrl.h>
#include <wrl\client.h>
#include <wrl\wrappers\corewrappers.h>

#include <roapi.h>

#include <windows.storage.h>
#include <windows.storage.streams.h>

using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;

using namespace ABI::Windows::Foundation;
using namespace ABI::Windows::Storage;
using namespace ABI::Windows::Storage::Streams;

int main()
{
    RoInitialize(RO_INIT_MULTITHREADED);

    ComPtr<IKnownFoldersStatics> pKnownFolders;
    HRESULT hr = RoGetActivationFactory(HStringReference(RuntimeClass_Windows_Storage_KnownFolders).Get(),
        IID_PPV_ARGS(pKnownFolders.GetAddressOf()));

    ComPtr<IStorageFolder> pFolder;
    pKnownFolders->get_VideosLibrary(&pFolder);

    RoUninitialize();

    getchar();
    return 0;
}
好了,可以看到,我们拿到了用户的视频文件夹,从上面的代码大家可以发现,这些代码,头文件和using多生死,主函数真正有用的代码满打满算就 4行,是不是微软脑残?
恩对,是微软脑残,好了这个不说。

我们看到我们拿到了一个IStorageFolder接口实例,代码目前还算正常。
然后我们想在视频文件夹里面新建立一个文件,IStorageFolder提供了一个名为 CreateFileAsync的脑残方法,我们看看这个方法:
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值