37

微软最近为其新的 Phone 7 平台发布了工具和文档,令那些拥有大量 C++ 代码库的人(如我)不再支持原生开发感到沮丧。尽管我发现有人猜测这个决定会被推翻,但我对此表示怀疑。所以我在想,通过调整它以在 C++/CLI 下编译,让这个代码库可用于 Phone 7 是多么可行。当然,用户界面部分无法移植,但我不确定其余部分。有人有类似的经历吗?我不是在谈论执行繁重的低级工作的代码 - 但是模板和智能指针的使用非常频繁。

4

6 回答 6

11

c++/cli 理论上可以与 WPF/Silverlight 一起使用,使用的技巧是将 XAML 生成的 C# 替换为可以在代码隐藏文件中的主类内部使用的宏定义。我制定了这项技术,但没有动力将其超越理论——我很高兴混合语言。

至于在纯安全模式下为您的逻辑代码使用 c++/cli,这可能仍然是不可能的,但我很想听听有人现在如何尝试它。在 2008 年为 Silverlight 研究它时,我发现了这个令人生畏的silverlight 论坛评论

我刚刚通过将我的 C++ 项目中的 MSIL 编译成与 Silverlight 兼容的 DLL 来尝试使用 Silverlight&C++。好消息:它有效,您可以从 Silverlight 项目中调用此代码。坏消息:C++ 编译器显然使用了 Silverlight 不允许的 MSIL 指令。

所以,如果你尝试这个,即使是最简单的程序,你几乎会立即得到异常“操作可能会破坏运行时的稳定性”。对我来说,这使得我们很快就会看到 Silverlight for C++ 的可能性似乎不大,因为编译器的行为需要完全不同。

于 2010-09-30T00:17:57.010 回答
11

您可以使用 /clr:safe 选项在 C++/CLI 中生成可验证的托管代码。问题是您的大多数普通 c++ 代码都无法使用该选项进行编译。

于 2010-03-16T15:20:01.277 回答
9

C# 目前是 WinPhone7 唯一支持的语言。

我完全期望 MS 将来也会增加对 VB 和 C++/CLI 的支持,但不要指望很快就会开放原生代码和服。

原生代码有太多问题需要克服,特别是在安全性、可靠性等方面。托管代码更容易静态验证,更容易在运行时控制。

如果您对将 C++ 代码移植到 C# 感到不安,请庆幸 MS 没有强迫您必须迁移到 Objective-C ;)

根据我们自己的经验,将编写良好的 C++ 移植到 C# 的过程实际上比最初预期的要少得多。当然,有一个学习曲线,但你有任何端口。实际上,我们从将核心应用程序和数据引擎移植到 C# 中获得了很多好处,以至于我们重新调整了整个团队以使用 C# 编写代码,并在必要时将 C# 移植回 C++,而不是反过来!到目前为止,我们只将两个模块移植回 C++ 并通过互操作从我们的本机代码调用我们的 C# 代码。

同样,请记住,WinPhone 是一个全新的平台,它使用同类最佳、高产的下一代开发工具和平台。这不是你父亲的 WinMo。

如果对 C++ 的支持是您认为至关重要的事情,那么请确保 MS 知道——(恭敬地和专业地)在 MSDN 论坛和您附近的开发人员活动中表明您的立场。

更新1:2012-12-17:

虽然 Windows Phone 7 仍未正式支持原生 C++,但 Windows Phone 8 现在支持原生 C++ 代码,因此您可以更轻松地将现有 C++ 代码库移植到 Windows Phone 8(以及 Windows 8 和 Windows 桌面应用程序) .

虽然目前 Windows8/Phone8 平台和 API 之间还没有 100% 的兼容性,但我预计这两个平台在接下来的几个版本中会变得越来越集成。

现在尤其如此,因为 Windows 与微软其他团队之间更紧密合作的主要障碍之一最近离开了公司;)

更新 2:2014 年 4 月 15 日:

根据最近在 //BUILD/ 2014 上发布的公告,您现在可以开始使用 C++ 和 XAML、C#/VB 和 XAML 或 JavaScript 和 HTML 构建“通用”应用程序,这些应用程序将在 Windows 8.1、Windows Phone 8.1 和 Xbox One 上运行!有关构建 Windows Phone 8.1 通用应用程序的更多详细信息,请阅读本文

于 2010-05-20T23:21:41.717 回答
3

整个开发理念建立在 Silverlight 之上。我认为您可以毫无问题地将用 C++ 编写的托管 dll 添加到此 Silverlight 项目,但它不能使用本机代码。

我计划今晚在我的机器上安装这些工具,并尝试一下。

于 2010-03-16T15:07:46.257 回答
2

如果 MS 决定离开这条路并创造新的东西,那很好,这是 MS 的决定。所以让我们面对事实。Silverlight 还没有成功。由于 Apple、Android 和 RIM,MS 失去了重要份额。应用程序开发人员只需评估他们自己的应用程序的商业案例,并决定他们是否相信 Windows 7 手机的份额收益。对于我经营的公司,我们决定不再支持 MS Windows phone 7,不是因为这个或其他技术原因,而是因为我们不相信我们对端口的投资回报。如果我们看到这个新平台的市场成功,我们将来会开始支持 Apple、Symbian、Andoid 和 MeeGo。所有这些都支持 C/C++ 并使我们能够重用我们经过验证的应用程序内核。那么为什么要担心呢。个人技术偏好不应受到限制。

托马斯

于 2010-06-15T19:48:52.967 回答
1

终于在地平线上!

因此,发送给 Windows Phone 开发人员的关于他们未来的开发偏好和 XNA 的调查在调查中没有提到一次(发送给 Windows Phone 开发人员的调查 - 我提到过吗)

然而,他们确实会问:

您希望如何在您的移动应用程序/游戏中使用 C++?

  • 从上到下开发 C++ 应用程序/游戏(UI、业务逻辑和平台 API)
  • 用C++做业务逻辑,然后写平台抽象层
  • 使用 C++ 进行业务逻辑使用 3rd 方运行时引擎
  • 我不想使用 C++
于 2012-03-02T13:25:37.310 回答