none
听说Win8的WinRT与原Win32 API等价..可能用C++等本机代码开发,也可以用NET的C#开发,但不是基于NET的,那么C++是直接调用WinRT生成的原生代码.同样C#不是基NET的互操作调用WinRT吧(也可以说直接调用吧)?这有什么区别呢>> RRS feed

  • 问题

  • 听说Win8的WinRT与原Win32 API等价..可能用C++等本机代码开发,也可以用NET的C#开发,但不是基于NET的,那么C++是直接调用WinRT生成的原生代码.同样C#不是基NET的互操作调用WinRT吧(也可以说直接调用吧)?这有什么区别呢>>
    2011年11月27日 8:43

答案

  • WinRT不等价与C++或者Windows API, WinRT首先只能够在Metro Style App中使用,其次它是专门设计的一套APIs,并且WinRT库有自己专门的格式 *.winmd, 这种格式类似与.Net Dll Assembly, 它里面有一个清单是和.Net的dll相同的,所以我们可以用.Net方式来访问和调用它里面的API。并且VS 2011也能够兼容并且提供只能提示, 至于C++ 和 JS对于他的调用,Windows 8都设计专门的机制,保证他们之间的调用是透明的。

    说到WinRT的实现,其实归咎到底微软还是重新参照了 COM+的模式,但是这次的设计能够保证开发人员在使用上不需要额外特殊的写法,能够合之前.Net, C++, JS写代码风格保持一致,不想以前我们还需要通过 PInvoke 或者 Interop 程序集来调用。也就是说微软作了很多工作把以前需要我们做的事情他都做了。

    最后提一点,现在讨论这种原理性的问题还过于早,因为官方还有正式发布出详细的文档解释,只有零散的片断,所以很难给你解释详细的内容。请等待一下,之后会有详细内容发布的。现在还是关注于一些关于 Metro Style App开发好了。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    2011年11月29日 8:04
    版主
  • WinRT 是一个本地平台,它提供一些语言扩展以便非本地代码如 C++/CLI 或者任何 CLI 规范的托管语言如 C# 对它进行操作。

    C# 本身与 .NET 是无关的,C# 只是一种遵循 CLS/ECMA 规范的语言而已。.NET 是一种基于 CLI 的实现,WinRT 也可以是基于 CLI 的一种实现,但它与 .NET 是两个东西。这就像 Silverlight 与 WPF,以及 Silverlight 与 Windows Phone。他们长的差不多,但是 CLR 的实现机制截然不同。

    为了使您的认识更加清晰,请参考下表。

    平台

    本机/托管

    实现机制

    CLI 实现版本

    Windows (.NET 程序)

    本机/托管

    本机代码/CLI

    Microsoft .NET Framework 1.0, 1.1, 2.0, 3.0, 3.5, 4.0, 4.5

    Silverlight

    托管

    CLI

    Microsoft Silverlight SDK 1, 2, 3, 4, 5

    Windows Phone

    托管

    CLI

    Silverlight for Windows Phone 7.0, 7.1

    Windows Embedded

    本机/托管

    本机代码/CLI

    Microsoft .NET Micro Framework 1.0, 2.0, 3.0, 4.0

    XBOX

    本机/托管

    CLI

    XNA SDK 1.0, 2.0, 3.0, 4.0

    Windows 8 Metro 程序

    托管

    CLI

    Microsoft .NET Framework Core 4.5

    Windows 8 经典程序

    本机/托管

    本机代码/CLI

    Microsoft .NET Framework 4.5

    这也能够解释为什么不同的平台编译的代码不能相互引用的原因。因为 CLI 的实现可能不同。

     


    Mark Zhou
    2011年11月30日 8:56

全部回复

  • Hi zjh,

    欢迎来到MSDN论坛!

    请您参考下面的链接:
    WinRT: An Object Orientated Replacement for Win32
    http://www.infoq.com/news/2011/09/WinRT-API

    Windows Runtime
    http://en.wikipedia.org/wiki/Windows_Runtime

    "Native C++ is a first-class citizen of the WinRT-platform.

    The language has a number of extensions that enable integration with the platform and its type system. The syntax resembles the one of C++/CLI although it produces native code and metadata that integrates with the runtime via COM. The extensions also enable reference counting.

    WinRT is a native platform and supports any native C++ code. A C++ developer can reuse existing native C/C++ libraries with the only need to use the language extensions when writing code that is interfacing with the runtime.

    Windows classes

    The Windows classes are native C/C++ libraries (unmanaged) that are exposed by the WinRT. They provide access to all functionality from XAML parser to the camera function. "

     

    希望对您有所帮助!

    祝您,一切顺利!


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    2011年11月29日 7:56
    版主
  • WinRT不等价与C++或者Windows API, WinRT首先只能够在Metro Style App中使用,其次它是专门设计的一套APIs,并且WinRT库有自己专门的格式 *.winmd, 这种格式类似与.Net Dll Assembly, 它里面有一个清单是和.Net的dll相同的,所以我们可以用.Net方式来访问和调用它里面的API。并且VS 2011也能够兼容并且提供只能提示, 至于C++ 和 JS对于他的调用,Windows 8都设计专门的机制,保证他们之间的调用是透明的。

    说到WinRT的实现,其实归咎到底微软还是重新参照了 COM+的模式,但是这次的设计能够保证开发人员在使用上不需要额外特殊的写法,能够合之前.Net, C++, JS写代码风格保持一致,不想以前我们还需要通过 PInvoke 或者 Interop 程序集来调用。也就是说微软作了很多工作把以前需要我们做的事情他都做了。

    最后提一点,现在讨论这种原理性的问题还过于早,因为官方还有正式发布出详细的文档解释,只有零散的片断,所以很难给你解释详细的内容。请等待一下,之后会有详细内容发布的。现在还是关注于一些关于 Metro Style App开发好了。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us
    2011年11月29日 8:04
    版主
  • WinRT 是一个本地平台,它提供一些语言扩展以便非本地代码如 C++/CLI 或者任何 CLI 规范的托管语言如 C# 对它进行操作。

    C# 本身与 .NET 是无关的,C# 只是一种遵循 CLS/ECMA 规范的语言而已。.NET 是一种基于 CLI 的实现,WinRT 也可以是基于 CLI 的一种实现,但它与 .NET 是两个东西。这就像 Silverlight 与 WPF,以及 Silverlight 与 Windows Phone。他们长的差不多,但是 CLR 的实现机制截然不同。

    为了使您的认识更加清晰,请参考下表。

    平台

    本机/托管

    实现机制

    CLI 实现版本

    Windows (.NET 程序)

    本机/托管

    本机代码/CLI

    Microsoft .NET Framework 1.0, 1.1, 2.0, 3.0, 3.5, 4.0, 4.5

    Silverlight

    托管

    CLI

    Microsoft Silverlight SDK 1, 2, 3, 4, 5

    Windows Phone

    托管

    CLI

    Silverlight for Windows Phone 7.0, 7.1

    Windows Embedded

    本机/托管

    本机代码/CLI

    Microsoft .NET Micro Framework 1.0, 2.0, 3.0, 4.0

    XBOX

    本机/托管

    CLI

    XNA SDK 1.0, 2.0, 3.0, 4.0

    Windows 8 Metro 程序

    托管

    CLI

    Microsoft .NET Framework Core 4.5

    Windows 8 经典程序

    本机/托管

    本机代码/CLI

    Microsoft .NET Framework 4.5

    这也能够解释为什么不同的平台编译的代码不能相互引用的原因。因为 CLI 的实现可能不同。

     


    Mark Zhou
    2011年11月30日 8:56