我听说 Windows 8 开发将允许 XAML/HTML5 + C++ 应用程序,但它是本机非托管 C++ 还是托管 C++(以前称为 C++ .NET)?
3 回答
Windows 运行时 (WinRT)本身是一个本机非托管框架,但可以从托管 .NET 语言以简单的方式调用(与其他本机库和臭名昭著的 .NET 相比P/Invoke
)。
但除了从托管语言中使用它之外,它还可以从 C++/CX 中调用。这是标准 C++ 的Microsoft扩展,类似于 .NET 的 C++/CLI。但与后者相比,它完全是本机非托管 C++。但它支持一些 C++/CLI 的扩展,比如^
用于“类托管”指针的运算符。但在底层,这些实际上并不是托管的垃圾回收指针,而是原生引用计数指针,类似于std::shared_ptr
. 我认为它还支持类似 .NET 的属性和委托,以及部分类,以便与WinRT的XAML框架一起使用。
除此之外,您甚至可以使用所谓的Windows 运行时 C++ 模板库 (WRL)从标准 C++ 使用WinRT,尽管据说它比使用 C++/CX 更麻烦,并且您可能无法使用所有功能,例如简单的XAML接口,不确定。
它是您构建到 WinRT 组件中的非托管 C++。然后,您的 HTML5 或 Win8 .NET 应用程序可以引用这些组件。
为了添加到 Slugart 的好答案,您可以为 WinRT 应用程序(和 Java 脚本)编写非托管 C++,他们也很可能微软会将这种将非托管 C++ 编写到 Windows Phone 8 的能力也(目前不可能) - 这将是对包括我自己在内的一些开发团队来说,这是一个重大问题。