`
tubaluer
  • 浏览: 1499862 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

Visual Studio 11开发指南(14)C++11---C++/ CX设计

 
阅读更多

Visual Studio 11引入了一些深入的新的语言扩展,官方称为C + + / CX,这为了支持新的 API 模型在 Windows 8 中。一般人都会熟悉 C + + / CLI (即我们提供针对 CLR 的语言扩展),语法不应该似乎大不相同。

请注意,然而,在 C + + / CX 语法是非常类似于 C + + / CLI,底层实现是非常不同,它不使用 CLR 或垃圾回收器,与它生成完全本机代码 x 64)。

在微软支持 Windows 8 的设计中,有很多创新,包括纯库的方式,以及集成在语言中的支持的各种方法。有历史悠久的 Visual c + + 团队中支持 COM。从 MFC 在 ATL # import ,要归因 ATL.我们也有好一点的经验,在针对 CLR 包括原始托管的扩展,C + + / CLI 和 IJW 支持编译为 MSIL 的本机代码。

但是并未称为 WRL (Windows 运行时库),并支持针对 Windows 8 没有语言扩展 Windows 8 的开发一个新的 c + + 模板库。WRL 相当好,它可以看一看,看看所有的低级的细节如何实现的照明。它是由内部使用许多 Windows 团队,虽然它不会受到许多同样的问题,ATL 支持 com 经典。
1.创作组件的仍然是非常困难的。你要知道很多有关接口的低级的规则。
2.您需要单独的工具 (MIDL) 给作者接口/类型。
3.有没有办法自动地图接口从低级到更高的级别 (现代) 形式,引发异常,并且具有真正的返回值。
4.没有统一的创作和消费模式。

与一些 Windows 运行库中的新概念,这些缺点变得更难比在经典 COM/ATL.接口继承并不是基于 vtable 的像是在经典.com,类继承基于一个类似的机制来聚合,但有一些区别,包括私有和受保护的接口支持。我们很快意识到,尽管有需要一个低级的工具,像 WRL 对于绝大多数的用途,它实在太难用,是我们可以做很多更好地同时仍然保留性能,并提供大量的控制。

# Import 功能,无法在 VC6 提供了良好的机制,为消费具有类型库的 COM 对象。我们想提供类似 Windows 运行库 (它使用一个新的.winmd 文件),但时,能提供良好的消费体验,它不进行创作。由于 Windows 移动模型很多事都异步的创作的回调是非常重要的而且没有不包括至少一些创作的许多消费情况。此外,创作是很重要的写作为每一页的用户界面的应用程序和用户定义的控制是从现有的运行时类派生的类。

设计团队花了大量时间来讨论什么消费的 Windows 运行时组件应该看起来像。微软团队早就决定应公开的类和接口比 ABI 定义什么的更高级别。支持现代 c + + 的功能,如异常被认为是重要,以及将继承 (均为接口和类) 的运行时定义映射到 c + +,很自然的一种。它很快明白我们需要一些新的类型类别来表示这些,不能改变现有的 c + + 。我们经历了很多不同的名称,而不是等到决定使用^也决定使用ref 类指示 Windows 运行库类的创作。

还花了很多时间寻求各种方法,如何拿到 WinRT 类或接口的指针。这一决定的一部分也是接口的如何判断一个低级版本和接口的高级别版本之间的区别。有很多不同的建议,包括只使用*、 使用*用修饰符,并使用各种其他字符如@符号。在原始的扩展做为托管代码中,事实上未使用*修饰符 (__gc)。意识到,是否我们遵循这条路线,将有许多相同的问题。当开始思考什么类型的指针取消引用的突破来的一些会。这使意识到我们在做什么是类似于做时 C + + / CLI 的设计。有一点,有人建议"为什么不仅是用 ^ 符号?"后平息的笑声,它开始很有道理。关于设计点设计点后,经常来相同的设计决策,称之 C + + / CLI。

大家都想要表达的概念,很多人都已存在的 C + + / CLI 的语法。引用计数是一种形式的垃圾回收,使用^表示"refcounted"指针在 ZW 符合得很好。取消引用^的收益率%,也像 C + + / CLI。虽然很多概念都表示相同的方式,有几个领域,我们决定偏离 C + + / CLI。例如,在 C + + / CX,默认接口的类指定通过属性的接口列表时中 C + + / CLI 是类本身的属性。

在 C + + / CX 有了更好的开发模式比 C + + 进行互操作时的 CLI 引用类型与常规类型。在 C + + / CLI,托管对象可以左右移动在内存中运行时,垃圾回收器。这意味着不能得到真正的成员的地址 (不固定) 或甚至将基元类型 (如int) 除了嵌入到您的类。也不能把^到本机类或结构。在 C + + / CX,对象在内存中做不能移动,因此所有这些限制都不见了。可以将任何类型投入 ref 类,您可以将^放在任意位置。这种模式是以正常的 c + + 类型更加友好和使程序员更灵活地在 C + + / CX。

分享到:
评论

相关推荐

    OMRON欧姆龙FA通信组件CX-Compolet V2

    CX-Compolet 通过VB或VC#轻松编写程序以及读写 PLC数据。 易于使用,无需任何技术知识 ●提供了有助于您轻松、快速开发PLC通信的软件器件。 ●在不需要考虑网络间差异的情况下读写PLC数据。 ● 支持Microsoft ...

    Visual Studio 2017 免费版 社区版 安装包.zip

    对于C++开发者,可以使用C++/CX或C++/WinRT来构建UWP应用,或者使用C++11、C++14、C++17标准进行通用的跨平台开发。 4. **模板与项目系统**:内置的项目模板覆盖了各种应用场景,包括桌面应用、移动应用、Web应用、...

    Microsoft Visual Studio

    对于跨平台开发,Visual Studio引入了C++/CX和C++/WinRT技术,支持Windows Runtime API,使C++开发者能够构建Windows 8及更高版本的应用。此外,通过Visual Studio的跨平台工具,如CMake和vcpkg,开发者还能使用C++...

    Microsoft C++ 生成工具

    Microsoft C++ 生成工具: https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/

    C C++ projects and build systems in Visual Studio .pdf

    Visual Studio是微软公司提供的一个集成开发环境(IDE),支持多种编程语言,其中就包括C和C++。本文将主要介绍在Visual Studio中如何创建和管理C/C++项目以及构建系统。对于C/C++开发者来说,理解如何在Visual ...

    Direct3D Visual Studio 模板.zip

    该包需要通用 Windows 平台开发工作负载 ( Microsoft.VisualStudio.Workload.Universal) 和C++ 通用 Windows 平台工具( Microsoft.VisualStudio.ComponentGroup.UWP.VC)。Win32 模板需要使用C++ 的桌面开发工作负载 ...

    Visual C++全库

    6. **C++/CX**:在Visual C++ 2012中,微软引入了C++/CX,这是一种扩展,使得C++可以直接访问Windows Runtime API,用于开发Windows 8应用。 7. **Clang/LLVM支持**:在Visual C++ 2015 Update 3中,微软引入了对...

    Visual C++ 2010,亲测稳定版本,国家计算机二级指定版本

    Visual C++ 2010 是微软公司推出的集成开发环境(IDE),专为使用C++编程语言进行软件开发而设计。这个版本在2010年发布,是Visual Studio系列的一部分,提供了强大的编辑器、调试工具、性能分析器以及对.NET ...

    在Visual Studio使用C++开发Metro应用

    Visual Studio 11消费者预览版引入了对C++支持,使得本地应用开发者可以利用C++的强大性能和灵活性来创建Metro风格的应用。这种开发方式结合了C++的高效与Windows Runtime (WinRT)的现代API,为开发者提供了全新的...

    Mastering Windows 8 C++ App Development

    本书为读者提供了清晰的WinRT和C++/CX概述,介绍了WinRT的各种能力以及如何通过C++11和Visual Studio 2012来充分利用这些能力。 通过本书,读者将学习如何在Windows 8应用中运用以下特性: 1. 利用现有C++技能开发...

    Windows-SDK-8.1_C++包

    它包含了丰富的编程接口、头文件、库以及文档,特别是对C++开发的支持,使得Visual Studio 2015能够更好地处理C++项目。本文将深入探讨Windows SDK 8.1在C++开发中的关键知识点。 一、Windows SDK 8.1的核心组件 1...

    Visual C++ 2010 Express 中文版

    Visual C++ 2010 Express 是微软推出的面向个人开发者的一款免费集成开发环境(IDE),专为编写使用C++编程语言的应用程序而设计。这款工具是Visual Studio 2010系列的一部分,提供了丰富的功能,使得C++开发更加...

    Windiws 10 app开发例子大全

    总结来说,"Windows 10 App开发例子大全"是一个全面的教程资源,涵盖了C++在Windows 10应用开发中的应用,结合Visual Studio的使用,能够帮助开发者从基础到高级深入掌握Windows 10应用的开发技巧,无论你是初学者...

    WP8应用调用C++静态库示例代码

    - 在Visual Studio中,选择“新建项目”,然后选择“Windows Phone”类别下的“Windows Runtime Component (C++)”模板。 - 创建的项目将是PhoneLib1,它会包含一个C++类,我们可以在这个类中封装静态库的功能。 ...

    Visual C++ 知识库电子书

    Visual C++ 知识库电子书 VC 知识库文章 VC 知识库Faqs VC 知识库Tips VC++5.0是Microsoft新近推出的可视化C++集成开发环境。它在继承以前VC++的基础上增加了许多新的功能,用于支持Win32平台应用程序、服务...

    Visual Assist X(up to VS2019)

    Visual Assist X不仅提升了Visual Studio的基础功能,而且为C++, C#, Visual Basic等多种编程语言提供了更为智能的开发环境。 Visual Studio 2019 Community版本是Microsoft推出的免费且开源的集成开发环境,适用于...

    用c++编写Windows8应用商店程序实例

    Microsoft Visual Studio Express 2012 for Windows 8是专为Windows 8应用开发设计的集成开发环境(IDE)。它提供了丰富的工具集,包括代码编辑器、调试器、图形界面设计器等,极大地简化了开发流程。此外,通过...

    cpp-CWinRT是WindowsRuntime的标准C语言投影

    这个技术是微软为了提高开发效率和代码质量而推出的,它与之前的C++/CX不同,后者是微软为Windows Store应用设计的特定方言。 C++/WinRT的核心理念是通过标准C++语言特性,如模板和Lambda表达式,提供对WinRT API的...

Global site tag (gtag.js) - Google Analytics