BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

C++组件扩展:COM的新面孔

| 作者 Jonathan Allen 关注 595 他的粉丝 ,译者 侯伯薇 关注 0 他的粉丝 发布于 2011年9月21日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

目前COM编程仍然活跃在Windows平台上,但C++的新变种使得它更易于使用。它叫做C++组件扩展(Component Extensions),新的Windows运行时WinRT就是用这种新语言创建的。

尽管C++组件扩展还是基于COM,但它与.NET编程非常类似。也就是说,你可以直接对类和对象进行操作,而不需要通过COM接口。

C++组件首先要创建一个公共类,并用“public ref class XXX sealed”的形式来定义,其中“XXX”是类名。这样声明的类叫做“可激活的类(activatable class)”,可以供.NET和基于JavaScript的应用程序使用。“ref”关键字表示类是一种“与Windows运行时兼容的类型”。“sealed”关键字防止它被其它类继承,如果一个类想要被JavaScript使用,这是必要的条件。尽管文档没有明确说明,但似乎如果不从JavaScript使用,就不需要使用“sealed”关键字来声明类。例如,Button类就继承了ButtonBase。除了支持类之外,C++组件扩展还支持结构体。然而Windows运行时结构体仅限于裸数据成员(naked data members)使用。

类中可能会包含构造函数、方法、属性和事件。在类本身之外,你可能发现事件会使用“delegate”关键字。尽管这不是C++或者CLI,但出乎意料的是,这个语法使用“^”符号来结束。

在C++组件扩展中,内存是基于它所使用的语言的语义来区别处理的。如果C++应用程序使用了程序库,那么对象就会以引用的形式计算。当然,.NET消费程序会使用mark-and-sweep的垃圾回收机制。

公有方法是通过ABI(抽象二进制接口 Abstract Binary Interface)暴露出来的。这样的方法必须使用Windows运行时类型作为参数。C++的内建类型——像int和double——会自动转换,而其他类型的转换都必须进行显式地声明。对于那些使用了Platform::String作为参数类型的公共方法,微软建议在方法内部应使用标准的C++字符串类型。

通过ABI无法支持自定义的异常类型。开发者必须抛出一种内建的异常类型。如果还需要额外的信息,我们可以抛出一般的COMException,它会使用HRESULT作为参数。

尽管JavaScript支持的类都要带有关键字“sealed”,但它至少还可以实现接口。

查看英文原文:C++ Component Extensions: The New Face of COM

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

看来学习一些C++基本语法规则还是很有必要滴 by 高 翌翔

看来想自己开发 C++ Component Extensions 必须懂些C++基本语法规则,
否则真玩不转,嘿嘿

Platform::String看起来真没System.String亲切。

有时间去MSDN找个教程,不过没Win8咋玩呀,哈哈

Re: 看来学习一些C++基本语法规则还是很有必要滴 by 侯 伯薇

貌似现在有开发版的Win8可供下载,我前天下载了一份,但是还没有安装,呵呵。

另外,感觉最近WinRT是大家讨论的一个热点。

Re: 出手好快 by 高 翌翔

伯薇出手好快呀

确实,WinRT是Win8的技术核心,新闻“Design Details of the Windows Runtime”正在翻译中,
发布后还要请伯薇第一时间帮我挑Bug :)

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT