介绍Universal CRT

[原文发表地址]:Introducing the Universal CRT [原文发表时间]:2015/3/3 11:00 AM 在去年6月份,我们发布了两篇文章,就Visual Studio 2015 关于Visual C++ C Runtime(CRT) 我们已经做出的一些重大的改动进行了讨论。其中在C 运行时(CRT)重构中我们主要就CRT的主要框架改变进行了说明。在Visual Studio14 CTP1 中C运行时(CRT)的变更中我们列举了所有我们已经实现的重要的功能特性,以及我们已经做了的行为上的改动。 从我们写了那些文章而且发布了第一个Visual Studio2015 的Community Techology Preview(CTP)以来,我们逐月地收到了许多来自你们和客户的反馈。非常感谢你们在Microsoft Connect 发现了这么多优秀的bug,从第一个CTP开始虽然我们还没有就此作C出太多的改变,但我们一直都在努力地定位大家的问题,并努力做出更进一步的改善,而且结束了一些很花费时间的工程。最近发布的Visual Studio 2015 CTP6包含了我们做出的所有的改变。我们也将在接下来的一些文章来再次讨论这些改动:这篇文章讨论从第一个CTP以来主要的架构的改动; 而随后的一篇文章将会列举出所有新的模块已经解决了的bug 以及更详细的最新修改。 在我们去年6月的文章中,我们解释了我们是如何把CRT分成两个逻辑部分:一个是VCRuntime,它包含支持编译器的必备功能,比如就像进程启动和异常处理等;另一个“稳定的”包含所有CRT的完整类库部分,将来我们可以随时支持以及服务,而不是需要随着每个新版的VisualStudio来发布新版本的动态链接库。当时,这个“稳定的”部分是以提供2个类库的形式:AppCRT和DesktopCRT(发布的动态链接库命名为appcrt140.dll和desktopcrt140.dll)。 VCRuntime依旧和以前的CTP版本一样的形式和相同的内容存在。在最新的CTP6中,我们已经做了较大的改动,它已经在“稳定的”部分中了。AppCRT和DesktopCRT已经合并到一个类库之中了,我们把它称作Universal CRT。新的动态链接库命名为ucrtbase.dll(release)和ucrtbased.dll(debug);他们不会包含版本号,因为我们将对它们做随时的支持以及服务。 Universal CRT是Windows操作系统的一个组件。它将作为Windows 10的一部分,首次发布会在一月技术预览版中,另外通过Windows自动更新对老版本的操作系统进行支持。 用Universal CRT创建软件 以前,所有的CRT的头文件,源文件和类库都是作为Visual C++ SDK的一部分来部署的,安装在你的Visual Studio安装目录下的VC子目录中(通常是C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC)。VCRuntime的文件依然是Visual C++ SDK的一部分。头文件,源文件和类库现在都是作为独立的Universal CRT SDK的一部分来部署的;它默认安装在C:\Program Files (x86)\Windows Kits\10。Debug的urtbased.dll也一样是这个SDK的…

1

Xamarin 安卓Native Applications开发

[原文发表地址]:Developing Xamarin Android Native Applications [原文发表时间]:2015/02/23 12:40 PM Xamarin已经快速成为一种创建跨平台移动应用的流行的方式,从而促进真正的代码重用,同时它允许开发人员创建native* (native 即平台固有的) 用户接口,提供给他们入口去查看底层平台/设备暴露的功能全谱,而且通过允许应用程序利用平台的特定硬件加速来保证native* 性能。此外,Xamarin完全集成到Visual Studio,而且允许像iOS,Android 和Windows 应用开发一样。 Xamarin对我们真正的native (C/C++) 开发人员意味着什么?如果你看一下Xamarin目前针对安卓平台的方法,当编译端到端Xamarin安卓应用程序时,它允许利用安卓 native(C/C++)库。  然而,目前这种方法影响了Visual Studio中的Xamarin 安卓工程文件, 以及在Xamarin 安卓指南里添加Item-Group,使其指向提到的预置动态共享库。通常这个native动态共享库是在另一个IDE(通常是Eclipse)开发的, 它进一步增加了复杂性以致开发人员现在担心使用两个IDE的动态共享库,而且享受增加复杂性后,他们在时进行编辑、编译和调试他们的应用特别是调试到在native(C/C++)函数库所带来的乐趣。对Visual Studio 2015 CTP 6而言,这已不再是问题,开发人员现在可以在Visual Studio中甚至创建这种native(C/C++) 库,我们(C++ 跨平台移动团队)一直致力于Xamarin的开发,为了在开发Xamarin安卓Native applications时提供一个流畅的体验。这篇博文重点列举了在Visual Studio 2015 CTP 6中已经实现的一些功能,然而所有的工作还没有完成,我们很高兴您尝试使用它,并给我们反馈。 入门指南 开发人员要理解这篇博文,首先就需要安装Visual Studio 2015 CTP6,并且安装时选择Visual C++跨平台移动相关的选项以及Xamarin可选的安装包。一旦这些都已经安装上之后,你已经具备了在Visual Studio中开发完整的Xamarin安卓Native applications的所有条件。我们开始创建一个Xamarin的安卓工程。依照篇博文的目的,我们选择一个最简单的安卓工程模板 “Blank App(安卓)”,打开文件 -〉新工程菜单,创建一个新的工程 “XamarinNativeExample”。 然后,我们从“Visual C++ – Cross-Platform n”节点下给已经创建的解决方案添加一个动态共享库工程“NativeLibrary”。…


在NuGet中C++常用的类库

[原文发表地址]:Find Your Favorite Library for C++ in NuGet [原文发表时间]:2015/3/4 03:04 PM 你们中的很多人或许知道NuGet是.NET 开发的一个转向库存储器,但是对于C++开发又是怎样的呢?这儿给出的答案或许会使你感到惊讶,因为在NuGet体系中已经有很多一流的开源C++类库了。 对于那些以前还没有使用过NuGet的人来说,NuGet是微软开发平台用于管理软件包的系统。增加库包到你的Visual Studio 工程,这就跟点击一个安装按钮一样简单, 其中这些库包是从NuGet得来的。在NuGet库中最初只有.Net类库。现在我们致力于将更多的C++类库添加到NuGet生态系统之中。 让我们下面就来浏览下在NuGet 库中对于C++ 开发者而言哪些是可用的? 范畴 名字 版本(NuGet/Latest) 详述 General Purpose Boost 1.57/1.57 完整的Boost包(包含附属的的二进制包)。  适用于Visual C++ 2013 / 2012 / 2010  GUI wxWidgets      Helper 2.4.2/2.4.2 这个包是个小助手,主要在wxWidgets开发C++程序提供帮助 WTL 9.0/9.0 Windows模板库(WTL)是一个C++库,主要用于开发Windows 应用程序和UI组件 Graphics Ogre3D 1.83/1.90 一个被广泛使用的开源三维图形渲染引擎。 DirectX      Toolkit…


针对Android的C++ REST SDK

[原文发表地址]:Targeting Android with the C++ REST SDK [原文发表时间]:2015/1/6 10:22 PM 刚好在新年假期前我们发布了C++ REST SDK的一个新的版本,V2.4.0。其中有一个新添加到类库里面的特性是通过使用Visual Studio 2015跨平台移动开发来支持Android和x86 Android模拟器。在这篇文章里面我打算大致展示一下如何创建一个应用了C++ REST SDK的Android Native Activity。 创建一个新的Android Native Activity 先创建一个新的Android应用程序,首先要同通过在Visual Studio的Visual C++ -> Cross Platform下面选择使用Native-Activity Application(Android)工程。 一旦这个模板完成,你就会得到一个Android应用程序,这个程序运行时会在屏幕上循环显示纯色,如果触摸一次屏幕就会改变一次颜色。 接下来让我们创建C++ REST SDK来和这个应用一起使用。 添加C++ REST SDK NuGet软件包 为了能够在制作针对Android上有一个轻松的用户体验,我们已经为了Android发布了一个C++  REST SDK的NuGet软件包。这个软件包包含了二进制的针对ARM设备和x86设备的模拟器。你可以通过在Native Activity项目上右键点击“Manage NuGet Packages…”添加一个引用到NuGet软件包。一旦对话框显示搜索到的C++ REST SDK,然后选择安卓软件包: 在你点击安装之后,Visual Studio会自动下载C++ REST SDK软件包,以及它的一些依赖文件,还会自动设置Include Paths,以及链接到一些正确的类库。 接下来你将需要给你的工程中C++属性做一点点修改,这是为了让它利用C++ REST SDK。默认的Android模板不会启用所有的C++ REST…


CTP5中的本地内存诊断

[原文发表地址]:Native Memory Diagnostics in CTP5 [原文发表时间]:2015/1/29 1:02 AM 在VS2015 CTP 5中,Visual Studio的内存使用率工具现在是被默认选中的。当您在CTP5中初次调试一个本地app时,诊断工具将会启动,并且内存使用率和CPU使用率两个工具都会显示出来,因为两者都是默认被选中的。关于诊断工具窗口和其他工具的更多信息,请查阅Dan Taylor的这篇博客贴。 通过点击选择工具,您可以启用/隐藏这些工具。出于这篇博客的目的,我仅选择了内存这一个工具以简化截图。 注意在此窗格的底部有一个用来在下次调试会话中启用堆快照的选项: 默认情况下,本地快照是隐藏的,以保持调试时的运行时性能。下面窗格中的描述解释了这项功能的用途和其对内在性能影响: 一旦把快照开关设置为Yes,重启编译器后快照卷将会在您随后的调试会话中开始工作: 本地与托管的:堆分析开销的不同之处 由于托管的内存分析器无法对进程中的开销进行处理而是要等到收集结束,运行时的影响是微不足道的,所以堆快照是默认启用的。由于两个内存工具在诊断工具窗口中共享了一个复选框,我们为本地应用启用快照添加了一个附加选项,用以在今后的调试会话中保存F5运行时性能。依赖于内存分配的数量和使用率,运行时放缓的可能范围,从大约20%到对于分配密集的应用程序高达3倍左后不等(基于我们最初的测试)。这样的运行时开销,在今天这样一个内存分配跟踪工具和其他能比得上的可用工具中是不幸的也是不可避免的。 今后我们计划为内存使用率工具添加一系列选项,开发人员可以在对一个应用程序开始调试会话之前启用本地堆快照,与之前可用的上一版本的内存分析器相似: 现已支持64位! 在我上一篇博客帖中有很多要求支持64位的声音,所以我非常高兴地宣布我们现在已经支持分析: 64位本地Win32工程 64位托管桌面工程 支持64位的Windows商店应用程序分析很快将会实现。请尝试此工具并告诉我们您的想法!   谢谢! Adam Welch VisualC++团队


IncrediBuild 和Visual Studio 2015 预览版

[原文发表地址]IncrediBuild 和Visual Studio 2015 预览版 [原文发表时间]2015/1/9 11:41PM 作为这篇博客的读者,我想你已经知道Visual Studio 2015 预览版在几个月以前已经发布了。这其中很多人已经下载了预览版,尝试了预览版所带来的“工作效率”,“性能”,“可移植性”,“跨平台开发”等功能的好处。我们很期待你的反馈(以及bug 的报告)! 但是你们可能不知道IncrediBuild,一款可以在Visual Studio上面集成的工具。它现在支持Visual Studio 2015 和Visual Studio 2013 Community Edition. 要点如下: “预执行”功能现在在所有的代理上都是默认启用的状态(涉及VS2010 以及以上版本)。 支持Visual Studio Android应用程序的编译。IncrediBuild 将会增强Visual Studio Android应用程序的编译甚至可以在一个独立的工作站上编译。 支持Visual Studio 通用工程的编译。 更多详情和下载一个免费试用版, 请访问IncrediBuild。 如果你有其他反馈和问题, 可以评论在博客下面或者通过ebattali@microsoft.com联系我。 公告  

2

Native-Activity (安卓) 应用开发

[原文发表地址]Developing Native-Activity (Android) applications [原文发表时间]2014/12/5  8:05AM 概述 Visual Studio 2015 预览版(从这里下载)增加了一种功能,作为跨平台移动开发的一部分,即开发人员可以创建安卓Native Activity应用。安卓跨平台中的安卓Native Activity (API 级别为 9)增加了创建纯粹的C/C++应用的功能。同时在后台还有一些隐藏的Java JNI代码,这些设计是为了抽象细节信息,并让细节信息远离开发者。Native Activity应用很受游戏(例如虚幻4)以及图形密集型(OpenGL)应用的欢迎。这篇博文将引导您体验创建一个Native Activity应用,并经历以下开发周期,包括编辑、编译、调试Native Activity代码。当你完成Visual Studio的这个体验的后,我们欢迎您的想法及任何反馈。 入门指南 在开始创建Native Activity应用之前,请先掌握这个体验所需要的跨平台移动工具。如果你还没有掌握请参考这篇博文,它可以帮你获得经验。掌握这个工具后,让我们开始创建OOTB Native-Activity 应用,从‘Visual C++ – Cross Platform’ 节点下选择一个可用的Native Activity 应用模板。 Native-Activity 解决方案 探究创建的这个模板让我们从解决方案的结构开始。从下面的图中可以看到‘HelloNativeActivity’ 方案有‘HelloNativeActivity.NativeActivity’和 ‘HelloNativeActivity.Packaging’ 两个工程。NativeActivity工程用来封装这个方案中的所有具体的C/C++代码。 通过NativeActivity 工程的属性页面,用户可以设置工程的属性例如指定安卓API的级别、库的名称以及平台的工具集。请注意作为我们的跨平台移动启用的一部分,当指定安卓平台时我们已经提供了GLANG工具链(通过本机开发工具包(NDK) 使它可用)支持。这些支持包括增加了在属性页面简单提供‘代码生成’的编译器编译标志、‘优化’、以及”预编译头文件”的使用。 再看一下NativeActivity.Packaging 工程,它是HelloNativeActivity方案的第二个工程,通过调用Ant编译系统来绑定动态共享库并创建一个完整的安卓应(.apk)。因为这是一个NativeActivity方案,所以这个工程没有包含任何 Java代码但是作为Ant编译调用的一部分它可以很好的用来编译Java代码。同时请注意除此之外其它的文件的详细信息,例如安卓Manifest文件(AndroidManifest.xml),这个工程中也包含Ant 编译(build.xml)。 编辑-〉编译-〉调试周期 为了加快编辑-编译-调试周期,因此设计了跨平台移动体验。作为这个体验的一部分,针对安卓平台时,Clang工具链中增加了全面支持智能感应功能。这个是除了其它普通代码创建功能如重构,快速导航等功能外新加的功能。下图描述了在写代码时的不同功能。 接下来我们一起看一下NativeActivity应用的源文件。我们先看main.cpp源文件,‘android_main’ 功能就是任意native-activity应用的入口函数功能,以及运行事件轮询来接收输入事件以及实现其它功能。我们来编辑这个源文件,在特定的调试目标(模拟器/设备)添加以下代码段并运行,记录传感器的数量。你可以把下面这段代码添加在‘if (state->savedState != NULL)’ 条件判断开始之前。  …


使用Visual C++ 跨平台移动技术调试JNI Android 应用程序

[原文发表地址] Debug JNI Android Applications using Visual C++ Cross-Platform Mobile [原文发表时间] 2014/12/12  4:22PM 之前我们已经介绍了,开发人员能够在Visual Studio 2015 preview(在这里下载)中使用Visual C++创建跨平台移动应用程序。特别是对于Android平台而言,这项功能的引入使得开发人员能够创建Native-Activity 应用程序,涵盖一系列功能的动态和静态的本地应用程序,提供快速,精确,以及平滑的编辑-〉编译-〉调试开发迭代循环。本博客着重给出如何使用Visual Studio调试器去调试预编译好的,甚至是那些未曾在Visual Studio中编译过的本地android应用程序(Native Activity 和 JNI)。 调试预编译的JNI代码 为了证明这个,我们从一个预编译的JNI应用程序包文件开始。为此,本博客中我们将使用Native-Audio Android应用程序,它是Android本地开发套件(NDK)的一部分(在这里下载)。如果需要,应用程序的预编译版本和源文件已作为本博客的一部分附上。在这种情况下,这个APK文件已经由作为Android SDK Bundle一部分的 Eclipse Android集成环境编译。另外,还需注意,无论你用什么工具来编写本地代码(gcc或clang),只要你能生成APK调试信息(NDK_DEBUG=1和manifest中的android:debuggable=”true”)。就上面说的,让我们开始吧! 为了调试这个预编译的JNI Android应用程序,我们需要创建一个dummy工程,这个工程允许我们利用VS的部署引擎对预编译的APK部署并开始调试。对于这个Dummy工程,我们使用动态共享库 (Android) 模板建立。 当一个简单的动态共享库(Android)工程创建后,‘配置属性’下的调试属性页就会自动配置(如下图所示)。 用户需要填写以下信息: 要启动的包:包含.apk名字的.apk文件的路径(例如:C:\DebugAPK\NativeAudio.apk) 包名:Android 应用程序的Java包的名字,这个信息可以在‘androidmanifest.xml’文件中找到。(例如:com.example.nativeaudio)。更多信息请看以下例子的配置。 启动活动:启动活动的名字,这个信息可以在‘androidmanifest.xml’文件中找到。(例如:NativeAudio) 启动的活动(如:NativeAudio)和包名(com.example.nativeaudio)都可以从AndroidManifest.xml(如下图)获得,并作为NativeAudio NDK的一部分。   如果不能访问AndroidManifest.xml,可以通过另外一种方法在预编译的.apk文件使用aapt工具获得详细信息。Aapt可以在android-sdk中找到,构建工具目录并执行以下命令将在aapt中得到一个包含包值和活动名的xml树的结果。 aapt dump –values xmltree NativeAudio.apk AndroidManifest.xml 我们现在在调试属性页面中设置manifest详细信息并开始调试本地程序代码。在之后发布的版本中我们计划把这一过程自动化,用户无需在调试属性页面中填写这些信息。而且请注意目前我们只支持源代码本地部分的调试。为了开始调试我们需要在配置管理器中设置一些属性。   在配置管理器中进行配置,取消编译项目属性,选择部署属性。一旦选择了部署属性,按F5,之前编译好的.apk将会部署在Device/Emulator上,我们就可以模仿调试了。  …


加快增量开发者构建方案

[原文发表地址] VisualC++ Team Blog ->Speeding up the Incremental Developer Build Scenario [原文发表时间]2014/11/12 3:35PM 概述 Visual C++的主要关注领域之一是不断提高开发人员的生产率。牢记于此,很多的改进旨在开发者增量场景已经被引入了Visual Studio 2015 preview(下载点击这里)。增量开发者方案指的是,开发人员修改了单个或多个源文件(在修复bug的时候),再构建。这种构建方案对于Visual C ++来说大致相当于一次链接便携式可执行文件(.dll 或 .exe )花费的时间。当然正在这篇文章中讨论这种功能大多运用在链接器空间。  在链接器空间的新增功能,平均而言,我们已经看到了大约2倍提高简洁链接的情况,并增加了更多的方案,包括现在可以增量链接或增量代码生成(当使用链接时代码生成(LTCG))。下面总结了这些功能集以及如何使他们并附于下表,但如果你有兴趣了解更多关于这些功能的话,请继续沿着下面的部分阅读。    特性 描述 组态 用法 静态库的增量链接 增量连接当编辑被其他可携带执行文件调用的静态库(.dll 或者.exe) 影响所有除了LTCG启用构建 默认情况下启用时(/incremental)链接器开关。 /Debug:FastLink 调试时获得快速的链路吞吐量生成新的程序数据库(PDB)文件。 影响所有除了LTCG启用构建。 /Debug:FASTLINK(链接器开关) /Zc:inline和算法的改进 编译器不再为死代码生成符号信息。 影响所有除了LTCG启用构建。 / ZC:inline(编译器开关) 增量LTCG     (仅目标机器为x86) 当LTCG启用工作基础之上,启用增量代码生成。 仅影响LTCG建立。 / LTCG:incremental(linker switch)    …


Visual Studio 2015 预览版本中所有相关C++重构

[原文发表地址]All about C++ Refactoring in Visual Studio 2015 Preview [原文发表时间]2014/11/14 8:17PM 你好C++世界! 更新(1/6/2015):及时查看所有更新–自预览版版之后, 我们所做的的改进–在这个视频! 伴随着于周三发布的Visual Studio 2015 预览版本,我们很高兴向大家呈现一个全新的、改善的高效代码功能,它在最大程度上(最终)实现了C++的重构。特别感谢那些厌倦了Visual Studio “14” CTPs,并给予我们反馈意见的人们。在预览版本中,我们尽自己最大的能力在最大程度上整合了尽可能多的意见, 我们将继续润色这些功能。 我想花费一些时间列出重构功能,从基本的如何调用每一个功能,到你可能喜欢的灵活小技巧。下列功能将涵盖在这篇文章中。 重命名 提取功能 实施纯虚方法 创建声明/定义 移动函数定义 转换为原始字符串 重命名毫无疑问是最常用和最需要的重构工具。它是如此重要,我们把它放在右击菜单的顶级。(你也可以通过按两次“Ctrl+R”快捷键激活该功能。)当用完这些功能以后,将会保存该设置项,但是默认情况下,你要完成两个窗户,第二个窗口是预览窗口。 提示和技巧 如果要在预览窗口中,隐藏注释/字符串,不要勾选“Search comments/strings”。 如果要在预览窗户中显示所有注释/字符串,保持所有默认未勾选项,不要勾选“Rename comments/strings” 如果要显示和检查所有默认的注释/字符串, 勾选 “Rename comments/strings.” 想了解更多的信息(来自扩展功能部分),在9频道,观看Visual C++重构中的“重命名”。 提取功能 是我们最需要的第二功能. 我们仍在小范围的调整它,因此我们把它作为暂时扩展进行发;请针对这一功能给予我们反馈!一旦你安装了扩展功能,选择一段代码,右击,此功能在”Refactor…”之下(你同样可以通过Ctrl+R,Ctrl+M快捷键调出该功能。) 提示和技巧 该工具有内置错误检查功能,比如你选择了表达式的一部分。(为了获得最佳效果,最好选择有效、规范的代码。) 提取功能将匹配你当先的上下文。例如, 如果你想从一个成员函数中提取代码, 提取功能将同样作为一个成员函数 (之前的声明自动为你创建)。 实施纯虚方法将引出一个类所继承基类的所有纯虚方法。它是支持多个递归继承的。该功能可从类定义调用。 提示和技巧 该功能倡导良好的代码规范, 因此它将在头文件中创建声明,在代码中创建定义部分。 如果同名源不存在,将创建该同名源。 在基类中调用该功能实施虚方法仅限于特殊的基类。…