信息
您所需的主题如下所示。但此主题未包含在此库中。

Windows Phone 8 的本机代码

2014/6/18

Windows Phone 8 引入了使用本机代码实现 Windows Phone 的功能。在本节中,我们解释了如何在应用中使用 C++,同时推荐了一些方案。

所有 Windows Phone 8 应用都可以使用本机代码,但并非所有应用都必须如此。对于许多应用方案,托管应用提供的功能与性能与使用本机代码的应用相同。以下是您可能需要在应用中使用本机代码的理由。

  • 可移植性 – 如果要面向多个平台,那么在所有要面向的平台上可以使用的本机库中实现核心功能,可能非常有意义。

  • Direct3D 图形 – 如果您的应用需要使用 Direct3D 将图形呈现到屏幕,则必须使用本机代码执行此操作。

  • 性能 – 对于一些方案,借助本机代码您可以在需要大量计算的任务中获得性能好处。请注意,本机代码与托管代码之间的互操作会带来一定开销。这一开销可能抵消使用本机代码获得的性能好处,因此请勿假定使用 C++ 将自动提高应用的性能。

Windows Phone 8 支持 Visual C++ 2012。这是可在计算机上使用的 C++ 完整版,且这两个版本使用相同的编译器与 IDE。这意味着除了第三方库与中间件外,您的手机应用还可以重复使用已为其它平台开发的现有 C 和 C++ 库。

Windows Phone 8 支持可在计算机上使用的有限的一组 COM 与 Win32 API。有关所支持 API 的信息,请参见Windows Phone 8 的 Win32 和 COM API

所有 Windows Phone 8 应用也可使用 Windows Phone 运行时,这是一种用于桌面应用的手机特定 Windows 运行时 实现。Windows Phone 运行时 提供了基础结构与 API 库。基础结构是语言的核心“管道铺设”,其中包括类型激活、内存管理、通用类型系统以及标准编程模型,这一模型包含有对象、方法、事件、异常等等。Windows Phone 运行时 库包含适用于很多功能(例如语音、管理联系人、定位、传感器、网络等)的手机特定 API。此外,该库还支持可在计算机上使用的 Windows 运行时 库的一个子集。所有这些 API 都映射到手机上的 Visual Basic、C# 与 C++ 中。有关手机支持的 API 的详细信息,请参见 Windows Phone 运行时 API

Windows Phone 运行时 同样帮助实现了托管代码与本机代码之间的互操作。可以为项目添加一个在 C++ 中实现的 Windows Phone 运行时 组件,然后直接从托管代码访问此组件中的对象与方法。请注意,由于存在引用计数与数组界限检查等事务,在使用 Windows Phone 运行时 时会产生一些开销。为此,我们建议仅在托管与本机之间的边界上使用它。尤其是,如果准备实现性能至关重要的计算方案,您应当直接使用 C 或 C++ 编写计算库,然后创建一个可以从托管代码调用的 Windows Phone 运行时 包装。

Windows Phone 8 引入了在应用中使用 Direct3D 的功能,同时 Direct3D 代码必须用 C++ 编写。您可以使用 XAML 与 Direct3D 应用以及带有 XAML 的 Direct3D 应用项目模板来创建混合应用,在这些应用中,UI 通过托管(C# 或 Visual Basic)代码隐藏页面用 XAML 进行定义。对于这些应用,Windows Phone 运行时 组件包含有本机 Direct3D 代码,这些代码用于在 XAML UI 内部或之后呈现到屏幕。Direct3D 应用项目模板创建一个不使用 XAML 或托管代码的纯本机应用。因此,此类型的应用与基于 XAML 的应用之间存在多项功能与应用模型差异。有关确定应用与应用类型匹配情况的指南,请参见为 Windows Phone 8 的游戏选择正确的项目模板

有关 Windows Phone 上提供的 Direct3D API 支持的信息,请参见 Windows Phone 8 的 Direct3D

Windows Phone 应用不支持使用以下本机代码。

  • 本机代码无法从 XNA 应用中调用。

  • Windows Phone 8 不支持采用 C++ 代码隐藏应用模型的 XAML UI,而 Windows 应用商店 应用则支持。

  • 本机代码无法从 Windows Phone OS 7.0 或 Windows Phone OS 7.1 应用中调用。仅 Windows Phone 8 应用可以使用此功能。

显示: