【问题标题】:Windows 8, C++ and Metro GUI samples?Windows 8、C++ 和 Metro GUI 示例?
【发布时间】:2011-11-17 02:50:48
【问题描述】:

所以我看看这个(Windows build keynote 1:42:56) 我只是不明白 - 我可以使用什么来从 C++ 和/或 GUI 语言创建 GUI,从而能够从我的 C++ 代码中调用函数? HTML、XAML 还是什么?在哪里可以看到使用 C++ 为 Windows 8 Metro 应用程序执行 markup call codecode create GUI 示例的代码示例?

【问题讨论】:

标签: c++ windows user-interface windows-8 windows-runtime


【解决方案1】:

如果您想调用 C++ 代码,最简单的方法是将 C++ 与组件扩展一起使用。这只是编译为本机代码的普通 C++,但它有一些扩展(让人想起 C++/CLI),让您可以使用 WinRT COM 组件而不必担心 COM 管道。

使用 C++ 和 WinRT,您实际上可以像托管语言一样使用 XAML 来定义您的用户界面。它非常简洁,请参阅此处的文档:

我还没有研究过,但您仍然可以使用托管语言中的 P/Invoke 或 COM 互操作来调用 Metro 风格应用程序的 C++ 代码,但这尚未得到证实。很明显,桌面应用程序可以做所有它通常会做的事情。

【讨论】:

  • 您可以使用 P/Invoke 从 .NET 转到 C++,前提是您的 C++ 函数不会执行应用沙箱禁止的任何操作。然而,做这种事情的一个更好的方法是用 C++ 创建你自己的 WinRT 组件——这对新的语言扩展来说是一件轻而易举的事——然后从 .NET 中使用它。试试这个:创建一个新的 C# 应用解决方案,然后向其中添加一个“WinRT 组件 DLL”类型的 C++ 项目。您现在可以将项目引用从 C# 项目添加到 C++ 之一,使用 ref class 定义的所有公共类都将直接使用。为了好玩,ILDASM 你的 C# 程序集,看看里面!
  • 绝对酷。尽管我对非标准 C++ 扩展的感觉很复杂,但所有与 WinRT 无缝对接的语言都非常好。从原生 C++ 代码到 XAML 的数据绑定简直太疯狂了。
  • 你真的不需要扩展来编写或使用 C++ 中的 WinRT 组件,与 ATL 之类的东西相比,它们的帮助很大,因为 ATL 具有不太无缝的智能指针和大量用于 QueryInterface 和朋友们。就个人而言,我宁愿将它们视为不是语言扩展,而是将整个事物视为一种新语言,其中包括 C++ 作为一个完整的子集——有点像 Objective-C 之于 C。
  • 您不需要使用 P/Invoke 从 .Net 转到 C++。来自文档“新模型的主要特性之一是抽象二进制接口或 ABI,它定义了一个用于语言间通信的接口。在 Windows Developer Preview 中,本机 C++ 可以通过 ABI 与 JavaScript 和托管的 . NET 语言 C# 和 Visual Basic。”
  • @Pavel Minaev - 完全正确。在查看了文档并对编写本机 WinRT 应用程序必须使用 C++/CLI 感到愤怒之后,我得出的结论是 这就是 .NET 的样子就像从一开始一样,在这个世界上 C# 将是完全没有必要的。您现在可以通过简单地使用 WinRT 组件和对象来编写跨平台本机代码。您不必为此完全更改语言(不要让我开始使用 Mono 开始跨平台和所有 - 在 OS X 上尝试 KeePass2)。我正在接受这个想法。
【解决方案2】:

C++ 和其他语言的示例代码位于http://code.msdn.microsoft.com/windowsapps。你可以看看它是怎么做的。

【讨论】:

    【解决方案3】:

    您可以使用 C++ 代码编写 Metro 风格的应用程序。您还可以使用 Javascript/HTML/CSS 编写应用程序,并从这些 JavaScript 应用程序调用您用 C++ 或 C#/VB 编写的 API。

    【讨论】:

    • 从 HTML+JS 调用 C++ API,如果 API 不是面向 JSON/XML 服务器客户端的,而是面向 Windows 的,这将是一件有趣的事情!)你能提供任何链接吗通过地铁?
    • 更多信息,请参阅:channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-531T。该链接应在 2011 年 9 月 15 日的某个时间上线
    • 更好的是,只需在 Developer Preview 上试用即可。使用 JavaScript Metro 应用程序项目创建解决方案,然后向其中添加 C++“WinRT 组件 DLL”项目。您会注意到您可以在 JS 项目上执行“添加引用”,然后选择 C++ 项目。构建它,然后仔细查看 JS 中的 IntelliSense - 您会注意到它从 C++ 中获取命名空间,并探索内部的类及其成员是如何投影的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多