首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是C++/CX和C++/CLI,它们与C++和WinRT的关系如何?

什么是C++/CX和C++/CLI,它们与C++和WinRT的关系如何?
EN

Software Engineering用户
提问于 2012-08-24 13:28:28
回答 2查看 16.8K关注 0票数 34

我正在考虑接受学习C++来设计地铁应用的挑战,那时我遇到了C++/CX。

地铁应用程序能在C++ 11中编码吗?他们需要C++/CX才能工作吗?C++/CX到底是什么?是否可以只使用C++创建一个Metro应用程序,或者是否需要C++/CX?另外,C++/CLI是如何与这张图片相关联的呢?

EN

回答 2

Software Engineering用户

发布于 2012-08-30 21:13:43

微软曾经简单地制作了一个C++系统,允许你访问他们的Windows (称为win32),然后有一天,他们发明了.NET,并意识到一切都必须改变。

因此,他们创建了“C++托管扩展”,它基本上是C++,但带有大量非标准扩展,添加了像__gc这样的关键字来支持.NET特性(比如在GC堆上分配,而不是本地的)。

但是人们并不喜欢它,因为它实际上是t C++,有所有这些额外的关键字,所以微软重新设计了它,并将它命名为C++/CLI,它有一组小得多的附加关键字,但是引入了语法更改,比如^ (它是对GC堆上的.NET对象的引用“指针”)。

几年后,微软意识到.NET并不是他们说的那样的灵丹妙药,他们还合并了他们内斗的视窗和开发团队。这种重新评估的一部分导致创建了一个全新的Windows,名为WinRT,它完全是本地代码,这意味着旧的扩展不再有用,因此微软开发了他们的C++扩展,使使用新的WinRT API变得更容易-通过保留一些来自C++/CLI的扩展(例如^)。

所以--就这样,一个扩展C++的三个不同版本,表面上是C++。至少最新版本是本机代码,所以如果不想使用扩展,就不需要使用扩展,因为您可以直接访问API (它称为WRL,非常类似于旧的ATL模板类)

如果您认为您可能正在编写您不想要的跨平台代码-您可以更改API调用,但您不能在任何编译器上使用^,而不是VisualC++。我建议使用WRL,并尽可能保持代码的标准,因为与C++/CX相比,您需要编写的“额外代码”并不是很好。

票数 34
EN

Software Engineering用户

发布于 2012-08-30 21:00:10

引用https://devblogs.microsoft.com/cppblog/ccx-part-0-of-n-an-introduction/

。。。虽然C++/CX在语法上与C++/CLI相似,因此在许多方面看起来几乎相同,但在语义上却非常不同。C++/CX代码是本机代码,不需要CLR。在C++/CLI中编程可能非常困难,因为必须同时巧妙地处理两个非常不同的对象模型: C++对象模型及其确定性对象生存期,以及垃圾收集的CLI对象模型。使用C++/CX要简单得多,因为基于COM的Windows很好地映射到C++编程语言。Windows定义了一个相对简单的低级应用程序二进制接口(ABI),并要求组件使用通用元数据格式定义它们的类型。编写本机Windows组件并不严格要求C++/CX :不使用C++/CX语言扩展就可以使用C++编写Windows组件,而Visual 2012包括一个库Windows C++ Template library (WRL),以帮助更轻松地编写Windows运行时组件。作为Windows的一部分(在Windows命名空间中)发布的许多Windows运行时组件都是使用WRL编写的。C++ /CX没有什么神奇之处:它只会使用C++编写Windows组件变得更加简单,并有助于减少在使用WRL这样基于库的解决方案时必须编写的重复和冗长的代码。

票数 12
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/162168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档